国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JS筆記一:null與undefined、NaN、選擇結(jié)構(gòu)

silencezwm / 629人閱讀

摘要:語句用于立即終止本輪循環(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;

如果只是聲明變量而沒有賦值,則該變量的值是undefinedundefined是一個(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");
}
// world
switch結(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)算符

typeof 運(yùn)算符詳解

null 和 undefined 相同點(diǎn)

nullundefined都可以表示“沒有”,含義非常相似.將一個(gè)變量賦值為undefinednull,老實(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() // undefined

NaN

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

相關(guān)文章

  • 《JavaScript高級(jí)程序設(shè)計(jì)》筆記:基本概念

    摘要:一寫在前面最近重讀高級(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ǔ)的語言,由...

    ygyooo 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)筆記()

    摘要:雖然會(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…...

    pingan8787 評(píng)論0 收藏0
  • js入門筆記整理

    摘要:十進(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)該由...

    BigNerdCoding 評(píng)論0 收藏0
  • js基礎(chǔ)筆記-類型裝換

    摘要:在中,如果函數(shù)沒有聲明返回值,那么會(huì)返回。返回是一元運(yùn)算符,后跟變量的名稱,用于獲取變量的數(shù)據(jù)類型,其返回值有個(gè)以及。 前言 說好聽是說JS靈活, 說不好聽就是JS的坑太多, JS類型轉(zhuǎn)換就是一個(gè)大坑, JS的類型包括了原始類型的[null, undefined, String ,Number, Boolean],以及對(duì)象類型的[function, object]; JavaScrip...

    Cobub 評(píng)論0 收藏0
  • JS. ES5重點(diǎn)筆記】數(shù)據(jù)類型

    摘要:是最特殊的類型,表示沒有意義的數(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é)和原理不了解,通過閱讀這本書,希望能...

    Yu_Huang 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<