摘要:語句用于立即終止本輪循環(huán),返回循環(huán)結(jié)構(gòu)的頭部,開始下一輪循環(huán)。在調(diào)用函數(shù)時(shí)的用法表示空值,即該處的值現(xiàn)在為空。或空字符串注意,空數(shù)組和空對(duì)象對(duì)應(yīng)的布爾值,都是。
個(gè)人學(xué)習(xí)筆記
參考阮一峰的JavaScript教學(xué)
2.1-2.2章
變量1
變量的聲明和賦值,是分開的兩個(gè)步驟,上面的代碼將它們合在了一起,實(shí)際的步驟是下面這樣。
var a; a = 1;
如果只是聲明變量而沒有賦值,則該變量的值是undefined。undefined是一個(gè) JavaScript 關(guān)鍵字,表示“無定義”。
2
如果變量賦值的時(shí)候,忘了寫var命令,這條語句也是有效的。
var a = 1; // 基本等同 a = 1;
但是,不寫var的做法,不利于表達(dá)意圖,而且容易不知不覺地創(chuàng)建全局變量,所以建議總是使用var命令聲明變量。
JavaScript 是一種動(dòng)態(tài)類型語言,也就是說,變量的類型沒有限制,變量可以隨時(shí)更改類型。
var a = 1; a = "hello";變量提升
JavaScript 引擎的工作方式是,先解析代碼,獲取所有被聲明的變量,然后再一行一行地運(yùn)行。這造成的結(jié)果,就是所有的變量的聲明語句,都會(huì)被提升到代碼的頭部,這就叫做變量提升(hoisting)。
console.log(a); var a = 1;
上面代碼首先使用console.log方法,在控制臺(tái)(console)顯示變量a的值。這時(shí)變量a還沒有聲明和賦值,所以這是一種錯(cuò)誤的做法,但是實(shí)際上不會(huì)報(bào)錯(cuò)。因?yàn)榇嬖谧兞刻嵘?/strong>,真正運(yùn)行的是下面的代碼。
var a; console.log(a); a = 1;
最后的結(jié)果是顯示undefined,表示變量a已聲明,但還未賦值。
標(biāo)識(shí)符第一個(gè)字符,可以是任意 Unicode 字母(包括英文字母和其他語言的字母),以及美元符號(hào)($)和下劃線(_)。
第二個(gè)字符及后面的字符,除了 Unicode 字母、美元符號(hào)和下劃線,還可以用數(shù)字0-9。
arg0 _tmp $elem π
上面都合法
if…else 結(jié)構(gòu)else代碼塊總是與離自己最近的那個(gè)if語句配對(duì)。
var m = 1; var n = 2; if (m !== 1) if (n === 2) console.log("hello"); else console.log("world");
上面代碼不會(huì)有任何輸出,else代碼塊不會(huì)得到執(zhí)行,因?yàn)樗氖亲罱哪莻€(gè)if語句,相當(dāng)于下面這樣。
if (m !== 1) { if (n === 2) { console.log("hello"); } else { console.log("world"); } }
如果想讓else代碼塊跟隨最上面的那個(gè)if語句,就要改變大括號(hào)的位置。
if (m !== 1) { if (n === 2) { console.log("hello"); } } else { console.log("world"); } // worldswitch結(jié)構(gòu)
多個(gè)if...else連在一起使用的時(shí)候,可以轉(zhuǎn)為使用更方便的switch結(jié)構(gòu)。
switch (fruit) { case "banana": // ... break; case "apple": // ... break; default: // ... }
上面代碼根據(jù)變量fruit的值,選擇執(zhí)行相應(yīng)的case。如果所有case都不符合,則執(zhí)行最后的default部分。需要注意的是,每個(gè)case代碼塊內(nèi)部的break語句不能少,否則會(huì)接下去執(zhí)行下一個(gè)case代碼塊,而不是跳出switch結(jié)構(gòu)。
注意需要注意的是,switch語句后面的表達(dá)式,與case語句后面的表示式比較運(yùn)行結(jié)果時(shí),采用的是嚴(yán)格相等運(yùn)算符(===),而不是相等運(yùn)算符(==),這意味著比較時(shí)不會(huì)發(fā)生類型轉(zhuǎn)換。
var x = 1; switch (x) { case true: console.log("x 發(fā)生類型轉(zhuǎn)換"); default: console.log("x 沒有發(fā)生類型轉(zhuǎn)換"); } // x 沒有發(fā)生類型轉(zhuǎn)換
上面代碼中,由于變量x沒有發(fā)生類型轉(zhuǎn)換,所以不會(huì)執(zhí)行case true的情況。這表明,switch語句內(nèi)部采用的是“嚴(yán)格相等運(yùn)算符”,詳細(xì)解釋請參考《運(yùn)算符》一節(jié)。
三元運(yùn)算符 ?:JavaScript還有一個(gè)三元運(yùn)算符(即該運(yùn)算符需要三個(gè)運(yùn)算子)?:,也可以用于邏輯判斷。
(條件) ? 表達(dá)式1 : 表達(dá)式2
上面代碼中,如果“條件”為true,則返回“表達(dá)式1”的值,否則返回“表達(dá)式2”的值。
var even = (n % 2 === 0) ? true : false;
上面代碼中,如果n可以被2整除,則even等于true,否則等于false。它等同于下面的形式。
var even; if (n % 2 === 0) { even = true; } else { even = false; }
這個(gè)三元運(yùn)算符可以被視為if...else...的簡寫形式,因此可以用于多種場合。
var myVar; console.log( myVar ? "myVar has a value" : "myVar do not has a value" ) // myVar do not has a value
上面代碼利用三元運(yùn)算符,輸出相應(yīng)的提示。
var msg = "數(shù)字" + n + "是" + (n % 2 === 0 ? "偶數(shù)" : "奇數(shù)");
上面代碼利用三元運(yùn)算符,在字符串之中插入不同的值。
break 語句和 continue 語句break語句和continue語句都具有跳轉(zhuǎn)作用,可以讓代碼不按既有的順序執(zhí)行。
break語句用于跳出代碼塊或循環(huán)。
var i = 0; while(i < 100) { console.log("i 當(dāng)前為:" + i); i++; if (i === 10) break; }
上面代碼只會(huì)執(zhí)行10次循環(huán),一旦i等于10,就會(huì)跳出循環(huán)。
for循環(huán)也可以使用break語句跳出循環(huán)。
for (var i = 0; i < 5; i++) { console.log(i); if (i === 3) break; } // 0 // 1 // 2 // 3
上面代碼執(zhí)行到i等于3,就會(huì)跳出循環(huán)。
continue語句用于立即終止本輪循環(huán),返回循環(huán)結(jié)構(gòu)的頭部,開始下一輪循環(huán)。
var i = 0; while (i < 100){ i++; if (i % 2 === 0) continue; console.log("i 當(dāng)前為:" + i); }
上面代碼只有在i為奇數(shù)時(shí),才會(huì)輸出i的值。如果i為偶數(shù),則直接進(jìn)入下一輪循環(huán)。
如果存在多重循環(huán),不帶參數(shù)的break語句和continue語句都只針對(duì)最內(nèi)層循環(huán)。
數(shù)據(jù)類型數(shù)據(jù)類型詳解
typeof 運(yùn)算符詳解
null與undefined都可以表示“沒有”,含義非常相似.將一個(gè)變量賦值為undefined或null,老實(shí)說,語法效果幾乎沒區(qū)別。
在if語句中,它們都會(huì)被自動(dòng)轉(zhuǎn)為false,相等運(yùn)算符(==)甚至直接報(bào)告兩者相等。
if (!undefined) { console.log("undefined is false"); } // undefined is false if (!null) { console.log("null is false"); } // null is false undefined == null // true區(qū)別
null轉(zhuǎn)為數(shù)字時(shí),自動(dòng)變成0
Number(null) // 0 5 + null // 5
上面代碼中,null轉(zhuǎn)為數(shù)字時(shí),自動(dòng)變成0。
undefined是一個(gè)表示”此處無定義”的原始值,轉(zhuǎn)為數(shù)值時(shí)為NaN。
Number(undefined) // NaN 5 + undefined // NaN
null在調(diào)用函數(shù)時(shí)的用法
null表示空值,即該處的值現(xiàn)在為空。調(diào)用函數(shù)時(shí),某個(gè)參數(shù)未設(shè)置任何值,這時(shí)就可以傳入null,表示該參數(shù)為空。比如,某個(gè)函數(shù)接受引擎拋出的錯(cuò)誤作為參數(shù),如果運(yùn)行過程中未出錯(cuò),那么這個(gè)參數(shù)就會(huì)傳入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 // 對(duì)象沒有賦值的屬性 var o = new Object(); o.p // undefined // 函數(shù)沒有返回值時(shí),默認(rèn)返回 undefined function f() {} f() // undefinedNaN
NaN-MDN詳解
全局屬性 NaN 的值表示不是一個(gè)數(shù)字(Not-A-Number).NaN 是一個(gè)全局對(duì)象的屬性。
NaN 屬性的初始值就是 NaN,和Number.NaN的值一樣。在現(xiàn)代瀏覽器中(ES5中), NaN 屬性是一個(gè)不可配置(non-configurable),不可寫(non-writable)的屬性。
編碼中很少直接使用到 NaN。
通常都是在計(jì)算失敗時(shí),作為 Math 的某個(gè)方法的返回值出現(xiàn)的(例如:Math.sqrt(-1))
或者嘗試將一個(gè)字符串解析成數(shù)字但失敗了的時(shí)候(例如:parseInt("blabla"))。
判斷一個(gè)值是否是NaN
等號(hào)運(yùn)算符(== 和 ===) 不能被用來判斷一個(gè)值是否是 NaN。必須使用 Number.isNaN() 或 isNaN() 函數(shù)。
在執(zhí)行自比較之中:NaN,也只有NaN,比較之中不等于它自己。
NaN === NaN; // false Number.NaN === NaN; // false isNaN(NaN); // true isNaN(Number.NaN); // true function valueIsNaN(v) { return v !== v; } valueIsNaN(1); // false valueIsNaN(NaN); // true valueIsNaN(Number.NaN); // true
自己的測試:
下列運(yùn)算符會(huì)返回布爾值:
兩元邏輯運(yùn)算符: && (And),|| (Or)
前置邏輯運(yùn)算符: ! (Not)
相等運(yùn)算符:===,!==,==,!=
比較運(yùn)算符:>,>=,<,<=
如果 JavaScript 預(yù)期某個(gè)位置應(yīng)該是布爾值,會(huì)將該位置上現(xiàn)有的值自動(dòng)轉(zhuǎn)為布爾值。轉(zhuǎn)換規(guī)則是除了下面六個(gè)值被轉(zhuǎn)為false,其他值都視為true。
undefined null false 0 NaN ""或""(空字符串)
注意,空數(shù)組([])和空對(duì)象({})對(duì)應(yīng)的布爾值,都是true。
if ([]) { console.log("true"); } // true if ({}) { console.log("true"); } // true
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94695.html
摘要:一寫在前面最近重讀高級(jí)程序設(shè)計(jì),總結(jié)下來,查漏補(bǔ)缺。但這種影響是單向的修改命名參數(shù)不會(huì)改變中對(duì)應(yīng)的值。這是因?yàn)閷?duì)象的長度是由傳入的參數(shù)個(gè)數(shù)決定的,不是由定義函數(shù)時(shí)的命名參數(shù)的個(gè)數(shù)決定的。實(shí)際改變會(huì)同步,改變也會(huì)同步 一、寫在前面 最近重讀《JavaScript高級(jí)程序設(shè)計(jì)》,總結(jié)下來,查漏補(bǔ)缺。 二、JS簡介 2.1 JS組成 ECMAscript:以ECMA-262為基礎(chǔ)的語言,由...
摘要:雖然會(huì)輸出,但是這只是存在的一個(gè)悠久。在的最初版本中使用的是位系統(tǒng),為了性能考慮使用低位存儲(chǔ)變量的類型信息,開頭代表是對(duì)象,然而表示為全零,所以將它錯(cuò)誤的判斷為。 參考來源: JavaScript高級(jí)程序設(shè)計(jì):?book.douban.com/subject/105… 千古壹號(hào):?github.com/qianguyihao… 小冊前端面試之道:?juejin.im/book/5bdc71…...
摘要:十進(jìn)制最基本的字面量格式八進(jìn)制第一位必須是。如八進(jìn)制的十六進(jìn)制前兩位必須是。如十六進(jìn)制八進(jìn)制十進(jìn)制由于函數(shù)在處理八進(jìn)制時(shí)與存在分歧,會(huì)忽略數(shù)字前面的值。通常與方法的返回值相同下一篇入門筆記整理二操作符關(guān)注作者吧 下一篇:js入門筆記整理(二)——操作符 給入門的同學(xué)整理的筆記,不對(duì)的地方歡迎指出~ javascript的組成 首先需要明白的是,一個(gè)完整的javascript實(shí)現(xiàn)應(yīng)該由...
摘要:在中,如果函數(shù)沒有聲明返回值,那么會(huì)返回。返回是一元運(yùn)算符,后跟變量的名稱,用于獲取變量的數(shù)據(jù)類型,其返回值有個(gè)以及。 前言 說好聽是說JS靈活, 說不好聽就是JS的坑太多, JS類型轉(zhuǎn)換就是一個(gè)大坑, JS的類型包括了原始類型的[null, undefined, String ,Number, Boolean],以及對(duì)象類型的[function, object]; JavaScrip...
摘要:是最特殊的類型,表示沒有意義的數(shù),例如。十六進(jìn)制數(shù)八進(jìn)制數(shù)十進(jìn)制數(shù)十六進(jìn)制數(shù)對(duì)于部分情況,和存在分歧。例如,表示希臘字符關(guān)于字符串的轉(zhuǎn)換,其實(shí)核心就是函數(shù),如果是數(shù)字型,還可以添加參數(shù),使之變?yōu)槎M(jìn)制八進(jìn)制十進(jìn)制十六進(jìn)制數(shù)。 雖然目前已經(jīng)算是ES6的時(shí)代,然是ES5的尾巴仍在眾多框架中出現(xiàn),JS我雖然通過視頻等方式學(xué)習(xí),曾經(jīng)做過項(xiàng)目,但是仍對(duì)部分細(xì)節(jié)和原理不了解,通過閱讀這本書,希望能...
閱讀 1118·2021-11-25 09:43
閱讀 1639·2021-09-13 10:25
閱讀 2592·2021-09-09 11:38
閱讀 3400·2021-09-07 10:14
閱讀 1714·2019-08-30 15:52
閱讀 641·2019-08-30 15:44
閱讀 3572·2019-08-29 13:23
閱讀 1974·2019-08-26 13:33