01-JS數(shù)據(jù)類型

javascript.png

一、 JS的發(fā)展歷史

  • ,在1995年它抱,三十多歲的布蘭登·艾奇(Brendan Eich)在他任職的網(wǎng)景(Netscape)總部辦公桌旁,花了十天時(shí)間致力于編程工作中朴艰,最后成果是一種新的語(yǔ)言的誕生观蓄。最初的目的只是表單驗(yàn)證——為了減輕服務(wù)器的負(fù)擔(dān)。

  • 1996年呵晚,微軟,JScript

  • 1997年沫屡,ECMA(歐洲計(jì)算機(jī)制造商協(xié)會(huì))——TC39委員會(huì)(第一個(gè)標(biāo)準(zhǔn):ECMA-262

  • javascript和java的關(guān)系——沒有關(guān)系饵隙,但是JS在結(jié)構(gòu)設(shè)計(jì)上,借鑒了很多Java的內(nèi)容

  • ECMA的組成

BOM(Brower Object Module)瀏覽器對(duì)象模型

DOM(Document Object Module)文檔對(duì)象模型

二沮脖、 JS語(yǔ)言特點(diǎn)

  • 一個(gè)面向?qū)ο蟮目缙脚_(tái)的腳本語(yǔ)言
  1. 松散性(弱類型語(yǔ)言 eg:隱式數(shù)據(jù)類型轉(zhuǎn)換)
  2. 面向?qū)ο螅ǖ珱]有類的概念)金矛,基于原型的面向?qū)ο蟆?/li>
  3. 繼承
  4. 沒有多態(tài)芯急, 天生多態(tài),是鴨子類型語(yǔ)言

三驶俊、 JS引入方式

  • 嵌入頁(yè)面
<script type="text/javascript">
    document.write("hello world");
</script>
  • 外部文件
<script src="路徑(當(dāng)前文件夾要加 ./)"> 
   // 內(nèi)部不能編寫代碼, 編寫代碼無(wú)效;    
</script>

四娶耍、變量

  • 基本語(yǔ)法
var a; //聲明變量
a = 10;// 賦值變量
// 變量初始化(簡(jiǎn)寫操作);
var a = 10;
  • 變量名

變量是一個(gè)變量?jī)?nèi)部?jī)?chǔ)存數(shù)據(jù)類型和意義的核心依據(jù),所以我們?nèi)∶M可能貼切;

  1. 匈牙利命名法

基本原則是:變量名 = 屬性 + 類型 + 對(duì)象描述

  1. 駝峰命名法(Camel-Case)

第一個(gè)單詞以小寫字母開始饼酿;從第二個(gè)單詞開始以后的每個(gè)單詞的首字母都采用大寫字母 , 例如:myFirstName , getElementById

  • 關(guān)鍵字

var——定義變量的關(guān)鍵字

typeof——查看一個(gè)變量的類型

命名規(guī)則:只能包含數(shù)字榕酒、字母、下劃線故俐、$, 且不能用數(shù)字開頭

五想鹰、 數(shù)據(jù)類型

  • 基本數(shù)據(jù)類型

    1. number ——整數(shù)、浮點(diǎn)數(shù)

      NaN(Not a Number) ——數(shù)值類型中的非數(shù)值

         var a = "hello";
         var b = a * 10;  //非數(shù)字————內(nèi)容不確定
         var c = a * 10;
         alert(b == c);  //false, 兩個(gè)內(nèi)容不確定的變量药版,無(wú)法相等
         document.write((isNaN)); //true
         document.write(isNaN(123)); //false
      
    2. string——字符串

      注:?jiǎn)我?hào)和雙引號(hào)沒有區(qū)別

      字符串在控制臺(tái)打印的顏色的為黑色

    3. boolean——布爾類型

    4. undefined

    對(duì)于JS來(lái)講辑舷,一個(gè)變量如果沒有賦值,不能確定類型槽片,那就是undefined

    1. null(null的類型也是object)

    typeof(判斷數(shù)據(jù)類型的關(guān)鍵字)

    alert(typeof null)   // null在typeof運(yùn)算的時(shí)候會(huì)發(fā)生bug何缓;js認(rèn)為null是object
    alert(typeof NaN)    //  Number
    
  • 復(fù)合類型

    • object對(duì)象類型

    包括:function函數(shù)類型、日期類型还栓、RegExp類型 ……

  • JS中的等于

    1. 近似等于
      `var int1 = 10碌廓,int2 = "10";`
      NaN == NaN    //flase 自己不等于自己的特殊數(shù)字類型
      document.write(int1 == int2)  //true
    
    1. 絕對(duì)等于

    優(yōu)先比對(duì)數(shù)據(jù)類型(絕對(duì)等于相比近似等于更省性能,開發(fā)的時(shí)候盡可能使用===)

    document.write(int1 === int2); //false

六蝙云、 數(shù)據(jù)類型轉(zhuǎn)換;

含有布爾值氓皱、undefined、null類型的勃刨,與數(shù)值運(yùn)算時(shí)波材,優(yōu)先將以上三種轉(zhuǎn)換為數(shù)值Number();與字符相加時(shí),優(yōu)先將以上三種轉(zhuǎn)換為字符String();

  1. 隱式數(shù)據(jù)類型轉(zhuǎn)換

加法運(yùn)算中,只要有一個(gè)字符,另一個(gè)將隱式轉(zhuǎn)換為字符,然后首尾相連

var a = 1;
var b = {a:1,b:2};
var s = a + b;
console.log(s);    //a[object Object]

空字符串轉(zhuǎn)換為數(shù)值以后身隐,變?yōu)?

var a = "";
a++;
console.log(a);        //1

對(duì)象比較時(shí)廷区,不隱式轉(zhuǎn)換,而是比較引用地址

var obj = {
    a: 1,
    b: 2
};
var obj1 = obj;
obj1.a = 10;
console.log(obj === obj1); //true;

console.log({}=={}); //false(地址不同)
console.log({}==0); //false(地址不同)
console.log([]==[]);//false(數(shù)組是基于對(duì)象創(chuàng)建的,數(shù)組也是引用類型,也有引用地址)

數(shù)組轉(zhuǎn)換為字符串并不是[object Array], 而是直接將所有元素連接在一起形成字符串

"" == false == 0

console.log([]==false);    //true,[]可以轉(zhuǎn)換為空字符串,而"" == false == 0
console.log([]==0);        //true(同上)
console.log([]=="");       //true(同上)

// 先將[]轉(zhuǎn)換為布爾值,然后求反:對(duì)象本身轉(zhuǎn)換布爾值是true,求反后就是false
console.log(![]==false);   //true
console.log(![]===false);  //true
console.log([]==="");      //false

浮點(diǎn)數(shù)的運(yùn)算 ------ 0.1+0.2 為什么不等于0.3贾铝?隙轻??

解決方案:首先將浮點(diǎn)數(shù)轉(zhuǎn)為整數(shù)垢揩,進(jìn)行運(yùn)算玖绿,再除以相應(yīng)的位數(shù)

  1. 強(qiáng)制數(shù)據(jù)類型轉(zhuǎn)換
  • String()
var a = 5;
var num = String(a);
console.log(num);//打印黑色的字符a
  • toString()

十進(jìn)制 => R進(jìn)制; 如果直接使用就是轉(zhuǎn)換為字符串,如果加入?yún)?shù)數(shù)值(2-36)之間叁巨,則會(huì)得到對(duì)應(yīng)的進(jìn)制斑匪。

var a = 5;
var num = a.toString(2);
console.log(num);//101
  • String()和toString()的區(qū)別

都是將其他類型的變量轉(zhuǎn)換為字符串類型,區(qū)別在于toString無(wú)法轉(zhuǎn)化nullundefined

var a,b = null;
console.log(String(a));     //undefined
console.log(String(b));     //null
//null和undefined沒有toString()轉(zhuǎn)換方法
console.log(a.toString());
//Uncaught TypeError: Cannot read property 'toString' of undefined
console.log(b.toString());
//Uncaught TypeError: Cannot read property 'toString' of null
  • toFixed()
//將數(shù)值轉(zhuǎn)換為字符串锋勺,并且四舍五入保留兩位小數(shù)(參數(shù)為任意正整數(shù))
var a = 34.567
var num = a.toFixed(2);
console.log(num);
  • toPrecision()
//把數(shù)字四舍五入蚀瘸,格式化為指定的長(zhǎng)度
var a = 34.5678;
console.log(a.toPrecision(3));//34.6
  • toExponential()
//使用科學(xué)計(jì)數(shù)法狡蝶,只表示整數(shù)位一位,規(guī)定指數(shù)計(jì)數(shù)法中的小數(shù)位數(shù)贮勃,是 0 ~ 20 之間的值贪惹,包括 0 和 20
var a = 456789;
console.log(a.toExponential(2));
  • parseInt()

R進(jìn)制 => 十進(jìn)制

從左到右依次檢索,第一個(gè)不為數(shù)字的字符,省略并返回前面內(nèi)容寂嘉。 如果第一個(gè)字符不為數(shù)字 則轉(zhuǎn)換結(jié)果為NaN奏瞬。

var str1 = "hello world";
var str2 = "123.123hello world";
document.write(parseInt(str1));     //NaN
document.write(parseInt(str2));     //123
document.write(parseInt(true));     //NaN
var a = 24.56,b = 101;
console.log(a); //24
console.log(parseInt(b,2));
  • parseFloat()

可以帶小數(shù)點(diǎn)的

var str1 = "hello world";
var str2 = "123.123ello world";
document.write(parseFloat(str1));   //NaN
document.write(parseFloat(str2));   //123.123
  • Number()

只針對(duì)純數(shù)字內(nèi)容的字符串轉(zhuǎn)換有效,但凡是字符串中有不符合數(shù)字規(guī)則的部分垫释,都會(huì)轉(zhuǎn)換為NaN丝格。(true / false / null例外)

document.write(Number(56));     //56
document.write(Number("56"));   //56
document.write(Number("56ab")); //NaN
var str1 = "hello world";
var str2 = "123.123ello world";
document.write(Number(str1));   //NaN
document.write(Number(str2));   //NaN
document.write(Number(true));   //1
document.write(Number(false));  //0
document.write(Number(null));   //0
document.write(Number(undefined));  //NaN
  1. 其他類型轉(zhuǎn)為boolean型
var a = "", b = 0, c, d = null, e = NaN, f = false;
a = Boolean(a);
b = Boolean(b);
c = Boolean(c);
d = Boolean(d);
e = Boolean(e);
f = Boolean(f);
console.log(a,b,c,d,e,f);//false false false false false false
//除了"" , 0 , undefined, null, NaN, false, 其他任何內(nèi)容轉(zhuǎn)為布爾值都是true;
  1. 取整規(guī)則

Math.round =>四舍五入

Math.floor =>向下取整

Math.ceil =>向上取整

直接保留方案(保留n位小數(shù)) toFixed(3) //僅限于存儲(chǔ)了數(shù)字類型的變量使用

  • 8進(jìn)制、16進(jìn)制

var num8 = 010; //0 + 八進(jìn)制數(shù)字】

var num16 = 0xffff; //num16 = 65535

  1. null和undefined的使用區(qū)別

目前棵譬,null和undefined基本是同義的显蝌,只有一些細(xì)微的差別。null表示"沒有對(duì)象"订咸,即該處不應(yīng)該有值曼尊。典型用法是:

(1) 作為函數(shù)的參數(shù),表示該函數(shù)的參數(shù)不是對(duì)象脏嚷。

(2) 作為對(duì)象原型鏈的終點(diǎn)骆撇。

 Object.getPrototypeOf(Object.prototype)
 // null

undefined表示"缺少值",就是此處應(yīng)該有一個(gè)值父叙,但是還沒有定義神郊。典型用法是:

(1)變量被聲明了,但沒有賦值時(shí)趾唱,就等于undefined涌乳。

(2) 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供甜癞,該參數(shù)等于undefined夕晓。

(3)對(duì)象沒有賦值的屬性,該屬性的值為undefined悠咱。

(4)函數(shù)沒有返回值時(shí)蒸辆,默認(rèn)返回undefined。

 var i;
 i // undefined
 
 function f(x){console.log(x)}
 f() // undefined
 
 var  o = new Object();
 o.p // undefined
 
 var x = f();
 x // undefined
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末析既,一起剝皮案震驚了整個(gè)濱河市躬贡,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌眼坏,老刑警劉巖拂玻,帶你破解...
    沈念sama閱讀 219,270評(píng)論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡纺讲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門囤屹,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)熬甚,“玉大人,你說(shuō)我怎么就攤上這事肋坚∠缋ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 165,630評(píng)論 0 356
  • 文/不壞的土叔 我叫張陵智厌,是天一觀的道長(zhǎng)诲泌。 經(jīng)常有香客問我,道長(zhǎng)铣鹏,這世上最難降的妖魔是什么敷扫? 我笑而不...
    開封第一講書人閱讀 58,906評(píng)論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮诚卸,結(jié)果婚禮上葵第,老公的妹妹穿的比我還像新娘。我一直安慰自己合溺,他們只是感情好卒密,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著棠赛,像睡著了一般哮奇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上睛约,一...
    開封第一講書人閱讀 51,718評(píng)論 1 305
  • 那天鼎俘,我揣著相機(jī)與錄音,去河邊找鬼痰腮。 笑死而芥,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的膀值。 我是一名探鬼主播棍丐,決...
    沈念sama閱讀 40,442評(píng)論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼沧踏!你這毒婦竟也來(lái)了歌逢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,345評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤翘狱,失蹤者是張志新(化名)和其女友劉穎秘案,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,802評(píng)論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡阱高,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評(píng)論 3 337
  • 正文 我和宋清朗相戀三年赚导,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片赤惊。...
    茶點(diǎn)故事閱讀 40,117評(píng)論 1 351
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡吼旧,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出未舟,到底是詐尸還是另有隱情圈暗,我是刑警寧澤,帶...
    沈念sama閱讀 35,810評(píng)論 5 346
  • 正文 年R本政府宣布裕膀,位于F島的核電站员串,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏昼扛。R本人自食惡果不足惜寸齐,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評(píng)論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望抄谐。 院中可真熱鬧访忿,春花似錦、人聲如沸斯稳。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)挣惰。三九已至卧斟,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憎茂,已是汗流浹背珍语。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竖幔,地道東北人板乙。 一個(gè)月前我還...
    沈念sama閱讀 48,377評(píng)論 3 373
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像拳氢,于是被迫代替她去往敵國(guó)和親募逞。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容

  • 01javascript語(yǔ)法規(guī)范 <!DOCTYPE html> javascript語(yǔ)法...
    ouyangqinbin閱讀 1,312評(píng)論 0 0
  • 語(yǔ)句 JavaScript程序的執(zhí)行單位為行(line)馋评,也就是一行一行地執(zhí)行放接。一般情況下,每一行就是一個(gè)語(yǔ)句留特。 ...
    米塔塔閱讀 458評(píng)論 1 10
  • 前端07班 王語(yǔ)句JavaScript程序的執(zhí)行單位為行(line)纠脾,也就是一行一行地執(zhí)行玛瘸。一般情況下,每一行就是...
    ea203453e188閱讀 888評(píng)論 0 4
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些閱讀 2,031評(píng)論 0 2
  • JS基礎(chǔ)講解 JavaScript組成ECMAScript:解釋器苟蹈、翻譯DOM:Document Object M...
    FConfidence閱讀 572評(píng)論 0 1