Javascript 基礎(chǔ)之類(lèi)型

Javascript 基礎(chǔ)之類(lèi)型

內(nèi)置類(lèi)型

js 中內(nèi)置類(lèi)型一共 7 種(包括 es6)揩局,7 種內(nèi)置類(lèi)型可分為兩大類(lèi)型:基本類(lèi)型引用類(lèi)型(對(duì)象Object)

1.基本類(lèi)型包括:null大溜、undefined侦讨、stringnumber翠语、booleansymbol财边。

重點(diǎn)說(shuō)下數(shù)字類(lèi)型number

  • js 中數(shù)字類(lèi)型是浮點(diǎn)類(lèi)型的肌括,沒(méi)有 整型。浮點(diǎn)類(lèi)型基于 IEEE 754 標(biāo)準(zhǔn)實(shí)現(xiàn)酣难,在使用中會(huì)有 bug谍夭;
  • NaN 也屬于 number 類(lèi)型,并且 NaN 不等于自身鲸鹦;

2.對(duì)象(Object)是引用類(lèi)型慧库,在使用過(guò)程中會(huì)遇到 淺拷貝深拷貝 的問(wèn)題。

const x = { name: 'x'};
const y = x;
y.name = 'y';
console.log(x.name); // y

typeof 應(yīng)用

1.對(duì)于基本類(lèi)型馋嗜,除了 null 都可以顯示正確類(lèi)型

typeof x;        // 'undefined'
typeof '1';      // 'string'
typeof 1;        // 'number'
typeof true;     // 'boolean'
typeof Symbol(); // 'symbol'

typeof 1 也可以寫(xiě)成 typeof(1)齐板,其他也是一樣。

2.對(duì)于對(duì)象葛菇,除了函數(shù)都顯示object

typeof [];          // 'object'
typeof {};          // 'object'
typeof console;     // 'object'
typeof console.log; // 'function'

3.說(shuō)說(shuō) null甘磨,一個(gè)遺留 bug,明明是基本類(lèi)型眯停,可是就顯示 object

typeof null ;   // 'object'

那為什么會(huì)出現(xiàn)這種情況呢济舆?
js 最初版本中,使用的是 32 位系統(tǒng)莺债,為了性能考慮使用低位存儲(chǔ)變量的類(lèi)型信息滋觉,000 開(kāi)頭表示對(duì)象,而 null 表示全零齐邦,所以將它錯(cuò)判為 object 了椎侠。雖然現(xiàn)在內(nèi)部類(lèi)型的判斷代碼變了,但是這個(gè) bug 卻一直流傳下來(lái)措拇。

4.正確獲取變量類(lèi)型可使用 Object.prototype.toString.call(xx)我纪,獲得類(lèi)似 [object Type] 的字符串

Object.prototype.toString.call(111)

類(lèi)型轉(zhuǎn)換

1.轉(zhuǎn)Bollean

除了 undefinednull丐吓、false浅悉、NaN''券犁、0术健、-0,其他都為 true粘衬,包括對(duì)象苛坚。

2.對(duì)象轉(zhuǎn)基本類(lèi)型

對(duì)象轉(zhuǎn)基本類(lèi)型時(shí)比被,會(huì)調(diào)用 valueOftoString 兩個(gè)方法泼舱,也可以重寫(xiě) Symbol.toPrimitive (優(yōu)先級(jí)最高)

let p = {
  valueOf(){
    return 0;
  },
  toString(){
    return '1';
  },
  [Symbol.toPrimitive] (){
    return 2;
  }
}
console.log(1 + p);  // 3
console.log('1' + p);  // 12

3.四則運(yùn)算符

  • 只有加法運(yùn)算符時(shí)等缀,一方是字符串類(lèi)型,就會(huì)把另一方也轉(zhuǎn)為字符串類(lèi)型;
  • 其他運(yùn)算只要其中一方是數(shù)字娇昙,那么另一方就轉(zhuǎn)為數(shù)字;
  • 加法運(yùn)算符會(huì)觸發(fā)3鐘類(lèi)型轉(zhuǎn)換:將值轉(zhuǎn)換為原始值尺迂,轉(zhuǎn)換為數(shù)字,轉(zhuǎn)換為字符串冒掌。
console.log(1 + '1'); // 11
console.log(1 * '1'); // 1
console.log([1, 2] + [1, 2]); // '1, 21, 2'
// [1, 2].toString() => '1, 2' 
// [1, 2].toString() => '1, 2' 
// '1, 2' + '1, 2' => '1, 21, 2'

加號(hào)有個(gè)需要主要的表達(dá)式 'a' + + 'b'

console.log('a' + + 'b');   // aNaN
//  + 'b' => NaN

4.== 操作符

比較運(yùn)算 x == y噪裕,其中 xy 是值,產(chǎn)生 truefalse

(1).Type(x)Type(y) 相同股毫,則

  • Type(x)undefined膳音,返回 true;
  • Type(x)null,返回 true;
  • Type(x)number铃诬,則
    • xNaN祭陷,返回 falseNaN == NaN);
    • yNaN,返回 falseNaN == NaN);
    • xy 相等數(shù)值趣席,返回 true;
    • x+0兵志,y-0,返回 true;
    • x-0宣肚,y+0想罕,返回 true;
  • Type(x)string,則當(dāng) xy 為完全相同的字符序列(長(zhǎng)度相等且相同字符在相同位置)時(shí)返回 true霉涨,否則 false('11' == '21')按价。
  • Type(x)booleanxy 同為 true 或同為 false笙瑟,返回true;

(2).xnullyundefined楼镐,返回 true,互換也是;

(3).若 Type(x)numberType(y)string逮走,返回 comparison x = toNumber(y) 的結(jié)果鸠蚪,互換也是今阳;

(4).Type(x)boolean师溅,返回 toNumber(x) = y( 5 > 3 == 1),互換也是;

(5).Type(x)stringnumber,且 Type(y)object盾舌,返回 x = toPrimitive(y) 的結(jié)果墓臭,互換也是;

toPrimitive 對(duì)象轉(zhuǎn)基本類(lèi)型

有個(gè)燒腦的例子:

console.log( [] == ![] ); // true
// 從右往左解析妖谴, [] => true => 取反 => false => [] = false
// 根據(jù)第(4)條窿锉,toNumber(false) => 0
// 根據(jù)第(5)條酌摇,toPrimitive([]) == 0 => [].toString() => ''
// 根據(jù)第(3)條,toNumber('') == 0 => 0 == 0

總結(jié):對(duì)象-布爾(字符串)-數(shù)字

5.運(yùn)算符

  • 如果是對(duì)象嗡载,通過(guò) toPrimitive 轉(zhuǎn)為對(duì)象窑多;
  • 如果是字符串,通過(guò) unicode 字符索引來(lái)比較洼滚;

下一篇: Javascript 基礎(chǔ)之原型和原型鏈

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末埂息,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子遥巴,更是在濱河造成了極大的恐慌千康,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,185評(píng)論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件铲掐,死亡現(xiàn)場(chǎng)離奇詭異拾弃,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)摆霉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,652評(píng)論 3 393
  • 文/潘曉璐 我一進(jìn)店門(mén)豪椿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人斯入,你說(shuō)我怎么就攤上這事砂碉。” “怎么了刻两?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,524評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵增蹭,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我磅摹,道長(zhǎng)滋迈,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,339評(píng)論 1 293
  • 正文 為了忘掉前任户誓,我火速辦了婚禮饼灿,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘帝美。我一直安慰自己碍彭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,387評(píng)論 6 391
  • 文/花漫 我一把揭開(kāi)白布悼潭。 她就那樣靜靜地躺著庇忌,像睡著了一般。 火紅的嫁衣襯著肌膚如雪舰褪。 梳的紋絲不亂的頭發(fā)上皆疹,一...
    開(kāi)封第一講書(shū)人閱讀 51,287評(píng)論 1 301
  • 那天,我揣著相機(jī)與錄音占拍,去河邊找鬼略就。 笑死捎迫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的表牢。 我是一名探鬼主播窄绒,決...
    沈念sama閱讀 40,130評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼崔兴!你這毒婦竟也來(lái)了颗祝?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 38,985評(píng)論 0 275
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤恼布,失蹤者是張志新(化名)和其女友劉穎螺戳,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體折汞,經(jīng)...
    沈念sama閱讀 45,420評(píng)論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡倔幼,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,617評(píng)論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了爽待。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片损同。...
    茶點(diǎn)故事閱讀 39,779評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖鸟款,靈堂內(nèi)的尸體忽然破棺而出膏燃,到底是詐尸還是另有隱情,我是刑警寧澤何什,帶...
    沈念sama閱讀 35,477評(píng)論 5 345
  • 正文 年R本政府宣布组哩,位于F島的核電站,受9級(jí)特大地震影響处渣,放射性物質(zhì)發(fā)生泄漏伶贰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,088評(píng)論 3 328
  • 文/蒙蒙 一罐栈、第九天 我趴在偏房一處隱蔽的房頂上張望黍衙。 院中可真熱鬧,春花似錦荠诬、人聲如沸琅翻。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,716評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)方椎。三九已至,卻和暖如春凌外,著一層夾襖步出監(jiān)牢的瞬間辩尊,已是汗流浹背涛浙。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,857評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工康辑, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摄欲,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,876評(píng)論 2 370
  • 正文 我出身青樓疮薇,卻偏偏與公主長(zhǎng)得像胸墙,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子按咒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,700評(píng)論 2 354