要理解JS眨唬,首先会前,你得放下對象和類的概念,回到數(shù)據(jù)和代碼的本質(zhì)匾竿。編程世界只有數(shù)據(jù)和代碼兩種基本元素瓦宜,而這兩種元素又有糾纏不清的關(guān)系。JS就是把數(shù)據(jù)和代碼都簡化到最原始的程度岭妖。
JS中的數(shù)據(jù)是簡潔的临庇。簡單數(shù)據(jù)只有undefined
、null
昵慌、boolean
假夺、number
、string
這5種斋攀,而復(fù)雜數(shù)據(jù)只有1種已卷,即object
。好比中國古典的樸素唯物思想淳蔼,把世界最基本的元素歸結(jié)為金木水火土侧蘸,其他復(fù)雜的非物質(zhì)都是由這5種基本元素組成的。
JS中的代碼只體現(xiàn)為一種形式鹉梨,就是funciton
讳癌。
可以使用typeof
運算符來獲取一個JS元素的類型。由于typeof
是運算符存皂,因此可以有兩種等價的寫法:typeof X
和 typeof(X)
晌坤。
任何一個JS的標(biāo)識、常量、變量泡仗、參數(shù)都只是undefined
埋虹、null
、bool
娩怎、number
搔课、string
、object
截亦、function
類型中的一種爬泥,也即 typeof
返回值表明的類型。除此之外崩瓤,沒有其他類型了袍啡。
簡單數(shù)據(jù)類型
undefined
代表一切未知的事物,啥都沒有却桶,無法想象境输,代碼也就更無法去處理了。
可將 undefined
賦值給任何變量或?qū)傩杂毕担⒉灰馕肚宄嗽撟兞啃崞剩炊鴷虼硕嗔艘粋€屬性。
console.log(typeof(undefined)); // undefined
null
有那么一個概念嘁扼,但沒有東西信粮。無中似有,有中似無趁啸。雖難以想象强缘,但已經(jīng)可以用代碼來處理了。
// typeof null 返回 object不傅, 但 null 并非 object旅掂,具有 null 值的變量也并非 object。
console.log(typeof null);// object
boolean
是就是访娶,非就是辞友,沒有疑義。對就對震肮,錯就錯,絕對明確留拾。即能被代碼處理戳晌,也可以控制代碼的流程。
Number
線性的事物痴柔,大小和次序分明沦偎,多而不亂,便于代碼進(jìn)行批量處理,也控制代碼的迭代和循環(huán)等豪嚎。
console.log(typeof NaN, typeof Infinity); // number number
// NaN 參與任何數(shù)值計算的結(jié)果都是 NaN
console.log(NaN!=NaN, Infinity/Infinity);// true NaN
-
String
面向人類的理性事物搔驼,而不是機(jī)器信息。人機(jī)信息溝通侈询、代碼據(jù)此理解人的意圖等功能舌涨,都靠它了。
為了進(jìn)一步簡化編程扔字,JS還在這些簡單數(shù)據(jù)之上囊嘉,再規(guī)定了一些特殊含義。這些特殊含義又么可以使得 JS 的語句寫得更簡潔革为。但是扭粱,這些特殊含義有時也會給我們設(shè)下難以琢磨的陷阱。
例如震檩,undefined
琢蛤、null
、""
抛虏、0
這4個值轉(zhuǎn)換為邏輯時就是 false
博其,除了這4個家伙再加上 false
本身之外,其他任何東西轉(zhuǎn)換為邏輯值時都是 true
嘉蕾。有趣的是在undefined
贺奠、null
、""
错忱、0
儡率、false
這5個家伙中,除了undefined==null
之外以清,它們卻又不互相等儿普。使用這些規(guī)定,我們可以編寫更簡潔的邏輯判斷語句掷倔。
再如眉孩,完全由數(shù)字組成的字符串與該字符串表示的值是相等的。
// JS將`0`開頭的整數(shù)常量當(dāng)八進(jìn)制數(shù)處理
console.log(123=='123', 0123=='0123');// true false
JS中===
表示全等勒葱,也就是數(shù)據(jù)值和數(shù)據(jù)類型都必須相等才為真浪汪。
console.log(undefined==null, undefined===null);// true false
!==
就是不全等,不全等與全不等是兩個概念凛虽。
- “不全等”所表示的邏輯是
A!=B || typeof(A)!=typeof(B)
- “全不等”必須是值不相等且類型也不相等
A!=B && typeof(A)!=typeof(B)
不過死遭,在編程中基本遇不到“全不等”這樣的判斷,因此JS也就沒有專門的運算符凯旋。
所有簡單類型都不是對象呀潭,JS沒有將對象化的能力賦予給簡單數(shù)據(jù)類型钉迷,直接被賦予簡單類型常量值的標(biāo)識符、變量钠署、參數(shù)都不是一個對象糠聪。