摘要:小汪經(jīng)過實(shí)踐得出以下用途。空數(shù)組的類型也是,這表示在內(nèi)部,數(shù)組本質(zhì)上只是一種特殊的對象。調(diào)用函數(shù)時(shí),某個(gè)參數(shù)未設(shè)置任何值,這時(shí)就可以傳入,表示該參數(shù)為空。前端還是很有未來的下節(jié)內(nèi)容細(xì)數(shù)實(shí)用黑科技二。
前言
只有深入學(xué)精一門語言,學(xué)其他語言才能更好地舉一反三,觸類旁聽。
從接觸前端開發(fā)到現(xiàn)在已經(jīng)將近 2 年了,最近又看了阮一鋒寫的: 《JavaScript 語言入門教程》 一書,重溫 JavaScript 。
小汪將工作和面試遇到過的,沒多少人知道的 JavaScript 技巧,卻十分實(shí)用的技巧都總結(jié)在這里面,分享給大家 。
溫故而知新,我們對技術(shù)應(yīng)該有的態(tài)度是: Stay hungry ! Stay young !
1. 標(biāo)簽(label)JavaScript 語言允許,語句的前面有標(biāo)簽(label),相當(dāng)于定位符,用于跳轉(zhuǎn)到程序的任意位置,標(biāo)簽的格式如下。
label: 語句
標(biāo)簽可以是任意的標(biāo)識符,但不能是保留字,語句部分可以是任意語句。
標(biāo)簽通常與 break 語句和 continue 語句配合使用,跳出特定的循環(huán)。
top: for (var i = 0; i < 3; i++){ for (var j = 0; j < 3; j++){ if (i === 1 && j === 1) break top; console.log("i=" + i + ", j=" + j); } } // i=0, j=0 // i=0, j=1 // i=0, j=2 // i=1, j=0
上面代碼為一個(gè)雙重循環(huán)區(qū)塊,break 命令后面加上了 top 標(biāo)簽(注意,top 不用加引號),滿足條件時(shí),直接跳出雙層循環(huán)。如果 break 語句后面不使用標(biāo)簽,則只能跳出內(nèi)層循環(huán),進(jìn)入下一次的外層循環(huán)。
標(biāo)簽也可以用于跳出代碼塊。
foo: { console.log(1); break foo; // 注意要加 break 才能退出 console.log("本行不會輸出"); } console.log(2); // 1 // 2
上面代碼執(zhí)行到 break foo,就會跳出區(qū)塊。
continue 語句也可以與標(biāo)簽配合使用。
top: for (var i = 0; i < 3; i++){ for (var j = 0; j < 3; j++){ if (i === 1 && j === 1) continue top; console.log("i=" + i + ", j=" + j); } } // i=0, j=0 // i=0, j=1 // i=0, j=2 // i=1, j=0 // i=2, j=0 // i=2, j=1 // i=2, j=2
上面代碼中,continue 命令后面有一個(gè)標(biāo)簽名,滿足條件時(shí),會跳過當(dāng)前循環(huán),直接進(jìn)入下一輪 外層循環(huán)。 如果 continue 語句后面不使用標(biāo)簽,則只能進(jìn)入下一輪的 內(nèi)層循環(huán)。
小汪經(jīng)過實(shí)踐得出以下用途。
用途:
可以跳出循環(huán)。
對于多層循環(huán)也同樣適用。
特別是兩層或者多層循環(huán),只是為了找到想要的某個(gè)值時(shí),而循環(huán)的數(shù)據(jù)是大量的,用標(biāo)簽就非常高效。
2. 區(qū)分?jǐn)?shù)組和對象先來道面試題:
console.log(typeof window) console.log(typeof {}) console.log(typeof []) console.log(typeof null)
答案:
"object" "object" "object" "object"
上面代碼中,null 返回 object 。這是由于歷史原因造成的,且一切原型鏈的終點(diǎn)都是 null。
空數(shù)組( [] )的類型也是 object,這表示在 JavaScript 內(nèi)部,數(shù)組本質(zhì)上只是一種特殊的對象。而 instanceof 運(yùn)算符可以區(qū)分?jǐn)?shù)組和對象。
var o = {}; var a = []; o instanceof Array // false a instanceof Array // true3. null, undefined 和布爾值
經(jīng)常會有面試官問:null 與 undefined 的區(qū)別 ?
區(qū)別:
null 是一個(gè)表示“空”的對象,轉(zhuǎn)為數(shù)值時(shí)為 0 。
undefined 是一個(gè)表示"此處無定義"的原始值,轉(zhuǎn)為數(shù)值時(shí)為 NaN。
Number(null) // 0 5 + null // 5 Number(undefined) // NaN 5 + undefined // NaN3.1 用法和含義
對于 null 和 undefined,大致可以像下面這樣理解。
null 表示空值,即該處的值現(xiàn)在為空。調(diào)用函數(shù)時(shí),某個(gè)參數(shù)未設(shè)置任何值,這時(shí)就可以傳入 null,表示該參數(shù)為空。比如,某個(gè)函數(shù)接受引擎拋出的錯(cuò)誤作為參數(shù),如果運(yùn)行過程中未出錯(cuò),那么這個(gè)參數(shù)就會傳入 null ,表示未發(fā)生錯(cuò)誤。
undefined 表示“未定義”,下面是返回 undefined 的典型場景。
// 變量聲明了,但沒有賦值 var i; i // undefined // 調(diào)用函數(shù)時(shí),應(yīng)該提供的參數(shù)沒有提供,該參數(shù)等于 undefined function f(x) { return x; } f() // undefined // 對象沒有賦值的屬性 var o = new Object(); o.p // undefined // 函數(shù)沒有返回值時(shí),默認(rèn)返回 undefined function f() {} f() // undefined
注意,布爾值轉(zhuǎn)換的時(shí)候,空數(shù)組([])和空對象({})對應(yīng)的布爾值,都是true。
if ([]) { console.log("true"); } // true if ({}) { console.log("true"); } // true4. 數(shù)值
JavaScript 內(nèi)部,所有數(shù)字都是以 64 位浮點(diǎn)數(shù)形式儲存,即使整數(shù)也是如此。所以,1 與 1.0 是相同的,是同一個(gè)數(shù)。
1 === 1.0 // true
JavaScript 語言的底層根本沒有整數(shù),所有數(shù)字都是小數(shù)( 64 位浮點(diǎn)數(shù))。容易造成混淆的是,某些運(yùn)算只有整數(shù)才能完成,此時(shí) JavaScript 會自動把 64 位浮點(diǎn)數(shù),轉(zhuǎn)成 32 位整數(shù),然后再進(jìn)行運(yùn)算。
由于浮點(diǎn)數(shù)不是精確的值,所以涉及小數(shù)的比較和運(yùn)算要特別小心。
例如:
0.1 + 0.2 === 0.3 // false 0.3 / 0.1 // 2.9999999999999996 (0.3 - 0.2) === (0.2 - 0.1) // false 2.22 + 2.21 // 4.43 3.45 + 1.11 // 4.5600000000000005 2.22 + 2.24 // 4.460000000000001
但是商品計(jì)算金額的時(shí)候,金額的結(jié)果一般都是保留兩倍小數(shù)點(diǎn)的,那怎么辦呢?
可以用 toFixed 解決:
var a = 2.22 + 2.24 // 4.460000000000001 var result = (a).toFixed(2) // 4.465. Object 屬性的遍歷
for...in 循環(huán)用來遍歷一個(gè)對象的全部屬性(包括可遍歷的繼承的屬性)。但是,一般情況下,都是只想遍歷對象自身的屬性,所以使用 for...in 的時(shí)候,應(yīng)該結(jié)合使用 hasOwnProperty 方法,在循環(huán)內(nèi)部判斷一下,某個(gè)屬性是否為對象自身的屬性。
var person = { name: "老張" }; for (var key in person) { if (person.hasOwnProperty(key)) { console.log(key); } } // name最后
重大事件:2017年11月,所有主流瀏覽器全部支持 WebAssembly,這意味著任何語言都可以編譯成 JavaScript,在瀏覽器運(yùn)行。
前端還是很有未來的 !!!
下節(jié)內(nèi)容:細(xì)數(shù) JavaScript 實(shí)用黑科技(二) 。
如果你覺得該文章對你有幫助,歡迎到我的 github star 一下,謝謝。
github 地址
參考教程: 《JavaScript 語言入門教程》
你以為本文就這么結(jié)束了 ? 精彩在后面 !!!
對 全棧修煉 有興趣的朋友可以掃下方二維碼關(guān)注我的公眾號
我會不定期更新有價(jià)值的內(nèi)容,長期運(yùn)營。
關(guān)注公眾號并回復(fù) 福利 可領(lǐng)取免費(fèi)學(xué)習(xí)資料,福利詳情請猛戳: Python、Java、Linux、Go、node、vue、react、javaScript
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/97965.html
摘要:前言書接上文細(xì)數(shù)實(shí)用黑科技一本文介紹獨(dú)孤九劍和兩篇最高內(nèi)功心法。可以將變量轉(zhuǎn)換為布爾值。可以把任何類型的值轉(zhuǎn)換為布爾值,并且只有當(dāng)這個(gè)變量的值為的時(shí)候才會返回,其他情況都返回。同樣的,函數(shù)體內(nèi)部聲明的函數(shù),作用域綁定函數(shù)體內(nèi)部。 showImg(https://segmentfault.com/img/remote/1460000016507838); 前言 書接上文:細(xì)數(shù) JavaS...
摘要:你首先需要了解的安全工具之一就是。是另一個(gè)可為進(jìn)行安全漏洞掃描的工具。和相似,是的安全審核工具。和其他容器安全工具不同,使用創(chuàng)建自定義配置文件非常容易。月日,北京海航萬豪酒店,容器技術(shù)大會即將舉行。 網(wǎng)絡(luò)安全問題的重要性大概毋庸置疑,最近無數(shù)關(guān)于惡意軟件和安全漏洞的消息已充分證明了這一點(diǎn)。 假如你要管理一個(gè)Docker環(huán)境,并希望幫助自己的公司或用戶在下一個(gè)大漏洞來臨時(shí)避免遇到麻煩,那...
摘要:你首先需要了解的安全工具之一就是。是另一個(gè)可為進(jìn)行安全漏洞掃描的工具。和相似,是的安全審核工具。和其他容器安全工具不同,使用創(chuàng)建自定義配置文件非常容易。月日,北京海航萬豪酒店,容器技術(shù)大會即將舉行。 網(wǎng)絡(luò)安全問題的重要性大概毋庸置疑,最近無數(shù)關(guān)于惡意軟件和安全漏洞的消息已充分證明了這一點(diǎn)。 假如你要管理一個(gè)Docker環(huán)境,并希望幫助自己的公司或用戶在下一個(gè)大漏洞來臨時(shí)避免遇到麻煩,那...
摘要:但是,構(gòu)造函數(shù)注意是大寫的有點(diǎn)特別。構(gòu)造函數(shù)接受的參數(shù)中,第一個(gè)是要傳入的參數(shù)名,第二個(gè)是函數(shù)內(nèi)的代碼用字符串來表示。 Javascript是一門很吊的語言,我可能學(xué)了假的JavaScript,哈哈,大家還有什么推薦的,補(bǔ)充送那啥邀請碼。 本文秉承著:你看不懂是你SB,我寫的代碼就要牛逼。 1、單行寫一個(gè)評級組件 ★★★★★☆☆☆☆☆.slice(5 - rate, 10 - rate...
閱讀 3720·2023-04-25 17:45
閱讀 3431·2021-09-04 16:40
閱讀 1002·2019-08-30 13:54
閱讀 2131·2019-08-29 12:59
閱讀 1400·2019-08-26 12:11
閱讀 3280·2019-08-23 15:17
閱讀 1523·2019-08-23 12:07
閱讀 3881·2019-08-22 18:00