avaScript 原語(yǔ)
JavaScript 建立在一系列基本單元之上。你應(yīng)該對(duì)其中的一些已經(jīng)很熟悉了,比如字符串和數(shù)字:
var greet = "Hello";var year = 89;
字符串和數(shù)字是該語(yǔ)言所謂“原語(yǔ)”的一部分。完整清單是:
布爾值用來(lái)表示可能是真或假的值。 null 是故意不去賦值,它通常被分配給一個(gè)變量,用于表示綁定完畢,稍后將填充有意義的內(nèi)容。
var maybe = null;
然后才是 undefined,這意味著變量仍然沒(méi)有被附加上:
var name;console.log(name)undefined
null 和 undefined 看起來(lái)非常相似,但它們是兩個(gè)截然不同的實(shí)體,很多開(kāi)發(fā)人員仍然不確定應(yīng)該使用哪個(gè)。
如果要判斷 JavaScript 實(shí)例的類(lèi)型,可以用 typeof 運(yùn)算符。讓我們用字符串嘗試一下:
typeof "alex"> "string"
還有數(shù)字:
typeof 9> "number"
用于布爾值:
typeof false> "boolean"
undefined:
typeof undefined> "undefined"
還有 null:
typeof null> "object"
結(jié)果令人驚訝! null 看起來(lái)像一個(gè)對(duì)象,但實(shí)際上它是 JavaScript 中的一個(gè)歷史性錯(cuò)誤,自語(yǔ)言誕生就躺在那里了。 由于這些問(wèn)題,JavaScript 一直聲名狼借。但這僅僅是個(gè)開(kāi)始。
陌生的事情
在 JavaScript 中,在兩種類(lèi)型之間進(jìn)行轉(zhuǎn)換時(shí)有一些奇怪的規(guī)則。讓我給你一些背景信息。先用 Python 舉一個(gè)例子。 在 Python 中執(zhí)行以下指令:
'hello' + 89
會(huì)給你一個(gè)明確的錯(cuò)誤:
TypeError: can only concatenate str (**not** "int") to str
而在 JavaScript 中,只有天空才是你的極限:
'hello' + 89
事實(shí)上給出:
"hello89"
如果我們嘗試向字符串添加數(shù)組,看起來(lái)會(huì)更加奇怪:
'hello' + []
將會(huì)得到
'hello'
還有
'hello' + [89]
會(huì)給你一個(gè)驚喜:
"hello89"
看起來(lái)這種轉(zhuǎn)換背后存在某種邏輯。它甚至適用于存在更多元素的 array :
'hello' + [89, 150.156, 'mike']
得到:
"hello89,150.156,mike"
這兩行 JavaScript 足以讓 Java 程序員逃離。但是這種行為在 JavaScript 中 100% 是又意義的。因此這種隱式轉(zhuǎn)換,也稱(chēng)為強(qiáng)制類(lèi)型轉(zhuǎn)換是非常值得探索的。
新聞熱點(diǎn)
疑難解答
圖片精選