溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Js中6種變量聲明方式

發(fā)布時(shí)間:2021-06-25 11:21:22 來(lái)源:億速云 閱讀:191 作者:chen 欄目:web開(kāi)發(fā)

這篇文章主要講解了“Js中6種變量聲明方式”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Js中6種變量聲明方式”吧!

1.1 typeof

1.1.1 基礎(chǔ)介紹

typeof是一個(gè)運(yùn)算符,其有兩種使用方式:(1)typeof(表達(dá)式);(2)typeof 變量名;返回值是一個(gè)字符串,用來(lái)說(shuō)明變量的數(shù)據(jù)類型;所以可以用此來(lái)判斷number, string, object, boolean, function, undefined, symbol 這七種類型,每種情況返回的內(nèi)容如下表所示:

類型結(jié)果
String'string'
Number'number'
Boolean'boolean'
Undefined'undefined'
Object'object'
function函數(shù)'function'
Symbol'symbol'

1.1.2 原理進(jìn)階

typeof方法雖然很好用,但該方法有一定的局限性:對(duì)于對(duì)象、數(shù)組、null 返回的值是 object。比如typeof(window),typeof(document),typeof(null)返回的值都是object,這是為什么呢?這就要從底層說(shuō)起。js在底層存儲(chǔ)變量的時(shí)候,會(huì)在變量的機(jī)器碼的低位1-3位存儲(chǔ)其類型信息:

  1. 鴻蒙官方戰(zhàn)略合作共建——HarmonyOS技術(shù)社區(qū)

  2. 000:對(duì)象;

  3. 010:浮點(diǎn)數(shù);

  4. 100:字符串;

  5. 110:布爾值;

  6. 1:整數(shù);

  7. 特例:

(1)null所有機(jī)器碼均為0

(2)undefined:用 ?2^30 整數(shù)來(lái)表示

typeof就是通過(guò)機(jī)器碼判斷類型,由于null的所有機(jī)器碼均為0,該機(jī)器碼和對(duì)象一樣,因此直接被當(dāng)作對(duì)象來(lái)看待,所以通過(guò)typeof就不能夠判斷區(qū)分對(duì)象還有null了。

1.1.3 實(shí)驗(yàn)

說(shuō)了這么多,還沒(méi)有進(jìn)行驗(yàn)證,下面就逐一驗(yàn)證一下:

// 字符串 console.log(typeof('lili')); // string // 數(shù)字 console.log(typeof(1)); // number // 布爾值 console.log(typeof(true)); // boolean // undefined console.log(typeof(undefined)); // undefined // 對(duì)象 console.log(typeof({})); // object // 數(shù)組 console.log(typeof([])); // object // null console.log(typeof(null)); // object // 函數(shù) console.log(typeof(() => {})); // function // Symbol值 console.log(typeof(Symbol())); // symbol

1.2 instanceof

1.2.1 基礎(chǔ)介紹

instanceof運(yùn)算符用于檢測(cè)構(gòu)造函數(shù)的 prototype屬性是否出現(xiàn)在某個(gè)實(shí)例對(duì)象的原型鏈上,返回值為布爾值,用于指示一個(gè)變量是否屬于某個(gè)對(duì)象的實(shí)例。其語(yǔ)法如下所示:

object instanceof constructor

1.2.2 原理進(jìn)階

instanceof 主要的實(shí)現(xiàn)原理就是只要右邊變量的 prototype 在左邊變量的原型鏈上即可。因此,instanceof 在查找的過(guò)程中會(huì)遍歷左邊變量的原型鏈,直到找到右邊變量的 prototype,如果查找失敗,則會(huì)返回 false.步驟如下所示:

  • 獲取左邊變量的隱式原型(即:__ proto __ ,可通過(guò)Object.getPrototypeOf()獲取);

  • 獲取右邊變量的顯示原型(即:prototype);

  • 進(jìn)行判斷,比較leftVal. __ proto __ . __ proto __ …… === rightVal.prototype,相等則返回true,否則返回false。

1.2.3 實(shí)驗(yàn)

上面講述了instanceof的簡(jiǎn)單使用和其原理,下面簡(jiǎn)單使用一下并驗(yàn)證一下該原理:

const arr = [1, 2]; // 判斷Object的prototype有沒(méi)有在數(shù)組的原型鏈上 console.log(arr instanceof Object); // true // 數(shù)組arr的原型 const proto1 = Object.getPrototypeOf(arr); console.log(proto1); // [] // 數(shù)組arr的原型的原型 const proto2 = Object.getPrototypeOf(proto1); console.log(proto2); // [] // Object的prototype console.log(Object.prototype); // 判斷arr的原型是否與Object的prototype相等 console.log(proto1 === Object.prototype); // false // 判斷arr的原型的原型是否與Object的prototype相等 console.log(proto2 === Object.prototype); // true

感謝各位的閱讀,以上就是“Js中6種變量聲明方式”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Js中6種變量聲明方式這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

js
AI