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