成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

Awe JavaScript [1] 基本概念

zollero / 2800人閱讀

摘要:年,以為藍(lán)本的建議被提交給了歐洲計(jì)算機(jī)制造商協(xié)會(huì),。而且給未經(jīng)聲明的變量賦值在嚴(yán)格模式下會(huì)導(dǎo)致拋出的錯(cuò)誤。這也正是使用操作符檢測(cè)值時(shí)會(huì)返回的原因。函數(shù)檢查過(guò)程是。但是這個(gè)轉(zhuǎn)換過(guò)程會(huì)導(dǎo)致特殊的和值應(yīng)用位操作時(shí),這兩個(gè)值會(huì)被當(dāng)成來(lái)處理。

前言

本文是 Awesome JavaScript 系列文章的第一篇,本系列文章主要為 JavaScript 的一些常見(jiàn)知識(shí)點(diǎn),是我在 JavaScript 學(xué)習(xí)過(guò)程中的一些筆記。


JavaScript 簡(jiǎn)介

JavaScript 誕生于 1995 年,和博主同年哈哈。當(dāng)時(shí),它的主要目的是處理以前由服務(wù)器端語(yǔ)言(如 Perl)負(fù)責(zé)的一些輸入驗(yàn)證操作。JavaScript 從一個(gè)簡(jiǎn)單的輸入驗(yàn)證器發(fā)展為一門(mén)強(qiáng)大的編程語(yǔ)言,完全出乎人們的預(yù)料。應(yīng)該說(shuō),它既是一門(mén)非常簡(jiǎn)單的語(yǔ)言,又是一門(mén)非常復(fù)雜的語(yǔ)言。

1997 年,以 JavaScript 1.1 為藍(lán)本的建議被提交給了歐洲計(jì)算機(jī)制造商協(xié)會(huì)(ECMA,European Computer Manufacturers Association)。不久后,該協(xié)會(huì)定義了一種名為 ECMAScript 的新腳本語(yǔ)言的標(biāo)準(zhǔn),即 ECMA-262。

1998 年,ISO/IEC(International Organization for Standardization and International Electrotechnical Commission,國(guó)標(biāo)標(biāo)準(zhǔn)化組織和國(guó)際電工委員會(huì))也采用了 ECMAScript 作為標(biāo)準(zhǔn)(即 ISO/IEC-16262)。自此以后,瀏覽器開(kāi)發(fā)商就開(kāi)始致力于將 ECMAScript 作為各自 JavaScript 實(shí)現(xiàn)的基礎(chǔ),也在不同程度上取得了成功。

到現(xiàn)在呢,我們可以說(shuō) JavaScript 是一門(mén)專(zhuān)為與網(wǎng)頁(yè)交互而設(shè)計(jì)的腳本語(yǔ)言,他其實(shí)由以下三部分組成:

ECMAScript,由 ECMA-262 定義,提供核心語(yǔ)言功能。

文檔對(duì)象模型(DOM,Document Object Model),針對(duì) XML 但經(jīng)過(guò)擴(kuò)展用于 HTML 的應(yīng)用程序編程接口(API,Application Programming Interface)。提供訪問(wèn)和操作網(wǎng)頁(yè)內(nèi)容的方法和接口。

瀏覽器對(duì)象模型(BOM,Browser Object Model),提供與瀏覽器交互的方法和接口。


在 HTML 中使用 JavaScript JavaScript 放置位置

傳統(tǒng)的做法是將所有的

本頁(yè)面需要在瀏覽器支持(啟用)JavaScript。


基本概念 標(biāo)識(shí)符

所謂標(biāo)識(shí)符就是指變量、函數(shù)、屬性的名字,或者函數(shù)的參數(shù)。標(biāo)識(shí)符可以是按照下列格式規(guī)則組合起來(lái)的一或多個(gè)字符:

第一個(gè)字符必須是一個(gè)字母、下劃線 _ 或一個(gè)美元符號(hào) $;

其他字符可以是字母、下劃線、美元符號(hào)或數(shù)字;

標(biāo)識(shí)符中的字母可以包含擴(kuò)展的 ASCIIUnicode 字母字符,但不推薦這樣做。

注釋

注釋推薦像下面這樣寫(xiě):

// 單行注釋

/*
* 這是一個(gè)多行
* (塊級(jí))注釋
*/
嚴(yán)格模式

ECMAScript 5 引入了嚴(yán)格模式的概念,嚴(yán)格模式是為 JavaScript 定義了一種不同的解析與操作模型。嚴(yán)格模式啟用方法如下:

function doSomething() {
  "use strict";
  //函數(shù)體
}

"use strict"; 這行代碼其實(shí)是一個(gè)編譯指示(pragma),用于高速支持的 JavaScript 引擎切換到嚴(yán)格模式。

變量

用 var 操作符定義的變量將成為定義該變量的作用域中的局部變量。也就是說(shuō),如果在函數(shù)中使用 var 定義一個(gè)變量,那么這個(gè)變量在函數(shù)退出后就會(huì)被銷(xiāo)毀。

function test() {
  var message = "hi";  //局部變量
}
test();
alert(message);       //錯(cuò)誤!
function test() {
  message = "hi";  //全局變量
}
test();
alert(message);       //"hi"

不推薦濫用全局變量,因?yàn)樵诰植孔饔糜蛑卸x的全局變量很難維護(hù)。而且給未經(jīng)聲明的變量賦值在嚴(yán)格模式下會(huì)導(dǎo)致拋出 ReferenceError 的錯(cuò)誤。

可以使用一條語(yǔ)句定義多個(gè)變量,只要把每個(gè)變量(初始化與否均可)用逗號(hào)分隔開(kāi)即可:

var message = "hi",
    found = false,
    age = 29;

因?yàn)?ECMAScript 是松散類(lèi)型的,因而使用不同類(lèi)型初始化變量的操作可以放在一條語(yǔ)句中完成。

注意,在嚴(yán)格模式下不能定義名為 evalarguments 的變量,否則會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。

數(shù)據(jù)類(lèi)型

ECMAScript 中有五種簡(jiǎn)單數(shù)據(jù)類(lèi)型(基本數(shù)據(jù)類(lèi)型):Undefined、NullBoolean、NumberString。還有一種復(fù)雜數(shù)據(jù)類(lèi)型 -- Object,在本質(zhì)上,Object 是一組無(wú)序的明值對(duì)組成的。乍一看這幾種數(shù)據(jù)類(lèi)型不足以表示所有數(shù)據(jù),但是 ECMAScript 數(shù)據(jù)類(lèi)型具有動(dòng)態(tài)性,所以沒(méi)有必要再定義其他類(lèi)型的數(shù)據(jù)了。

typeof 操作符
返回值 含義
"undefined" 這個(gè)值未定義
"boolean" 這個(gè)值是布爾值
"string" 這個(gè)值是字符串
"number" 這個(gè)值是數(shù)值
"object" 這個(gè)值是對(duì)象或 null
"function" 這個(gè)值是函數(shù)
var message = "some string";
alert(typeof message);    //"string"
alert(typeof (message));  //"string"
alert(typeof 95);         //"number"

上面幾個(gè)例子說(shuō)明,typeof 操作符的操作數(shù)可以是變量(message),也可以是數(shù)值字面量。注 -- typeof 是一個(gè)操作符。

在 JavaScript 中,null 是一個(gè) object,即 typeof null; 返回 object。這是設(shè)計(jì)的缺陷,在最初,使用標(biāo)記位來(lái)區(qū)分對(duì)象類(lèi)型和原始類(lèi)型,對(duì)象型用 0 標(biāo)識(shí),原始型用 1 標(biāo)識(shí)。導(dǎo)致了全零的 null 被識(shí)別為 object。null 被認(rèn)為是一個(gè)空的對(duì)象引用,也就是一個(gè)空的對(duì)象指針。這也正是使用 typeof 操作符檢測(cè) null 值時(shí)會(huì)返回 object 的原因。

在技術(shù)上講,函數(shù)在 ECMAScript 中是對(duì)象,不是一種數(shù)據(jù)類(lèi)型。然而函數(shù)確實(shí)也有一些特殊的屬性,因此通過(guò) typeof 操作符來(lái)區(qū)分函數(shù)和其他對(duì)象是有必要的。

Undefined 類(lèi)型

在 JavaScript 中,包含 undefined 值的變量與尚未定義的變量還是不一樣的。

var message;      //
alert(message);  //
alert(age);
var message;
alert(typeof message);  //"undefined"
alert(typeof age);      //"undefined"

即便未初始化的變量會(huì)自動(dòng)被賦予 undefined 值,但顯示的初始化變量依然是明智的選擇。如果做到這一點(diǎn),那么當(dāng) typeof 操作符返回 undefined 值時(shí),我們就知道被檢測(cè)的變量是沒(méi)有被聲明還是尚未初始化。

對(duì)于未聲明的變量,只能執(zhí)行一項(xiàng)操作即用 typeof 操作符檢測(cè)其數(shù)據(jù)類(lèi)型(未聲明的變量調(diào)用 delet 不會(huì)報(bào)錯(cuò),但沒(méi)意義,而且在嚴(yán)格模式下也會(huì)報(bào)錯(cuò))。

未初始化和未聲明的變量的區(qū)別就是,在用 typeof 操作符檢測(cè)其數(shù)據(jù)類(lèi)型時(shí)都顯示 undefined,但是在除此之外調(diào)用未聲明的變量時(shí)就會(huì)報(bào)錯(cuò)。

因?yàn)樵?JavaScript 中未定義和未聲明的變量用 typeof 操作符檢測(cè)其數(shù)據(jù)類(lèi)型時(shí)都顯示 undefined,所以 DOM 相關(guān)函數(shù)都是返回 null,從 API 設(shè)計(jì)角度來(lái)講是合理的。

無(wú)論什么情況下,都沒(méi)有必要將一個(gè)變量的值顯示的設(shè)置為 undefined。

Null 類(lèi)型

如果定義的變量準(zhǔn)備在將來(lái)保存對(duì)象,那么最好將該變量初始化為 null 而不是其他值。這樣只要檢查 null 值就可以知道相應(yīng)的變量是否已經(jīng)保存了一個(gè)對(duì)象的引用,如下所示:

if(car != null) {
  //對(duì) car 對(duì)象執(zhí)行某些操作
}

所以只要意在保存對(duì)象的變量還沒(méi)有真正保存對(duì)象,就應(yīng)該明確地讓該變量保存 null 值。

實(shí)際上,undefined 值是派生自 null 值的,因此 ECMA-262 規(guī)定對(duì)他們的相等性測(cè)試要返回 true

alert(null == undefined);      //true
Number 類(lèi)型

因?yàn)楸4娓↑c(diǎn)數(shù)值需要的內(nèi)存空間是保存整數(shù)值的兩倍,所以 ECMAScript 會(huì)不失時(shí)機(jī)的將浮點(diǎn)數(shù)值轉(zhuǎn)換為整數(shù)值。

ECMAScript 能夠表示的數(shù)的范圍為 Number.MIN_VALUE ~ Number.MAX_VALUE,在大多數(shù)瀏覽器中為 5e-324 ~ 1.7976931348623157e+308。當(dāng)程序執(zhí)行時(shí),數(shù)值超過(guò)正負(fù)范圍時(shí)會(huì)被分別轉(zhuǎn)化為 Infinity-Infinity。想確定一個(gè)數(shù)是否超出 JavaScript 數(shù)值范圍,可以用 isInfinite() 函數(shù)。

var result = Number.MIN_VALUE + Number.MIN_VALUE;
alert(isFinite(result));     //false

NaN 即非數(shù)值(Not a Number)是一個(gè)特殊值。用于表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況(這樣就不會(huì)拋出錯(cuò)誤了)。其有兩個(gè)特點(diǎn),首先任何涉及 NaN 操作都會(huì)返回 NaN,這一點(diǎn)在多步計(jì)算中可能會(huì)導(dǎo)致問(wèn)題。其次, NaN 與任何值都不相等,包括其本身。ECMAScript 也定義了 isNaN(); 函數(shù)。這個(gè)函數(shù)接收一個(gè)參數(shù),這個(gè)參數(shù)可以是任何類(lèi)型的,而函數(shù)會(huì)幫我們確定這個(gè)參數(shù)是否 不是數(shù)值。函數(shù)檢查過(guò)程是 `isNaN(); => valueOf(); => toString();。

有三個(gè)可以把非數(shù)值轉(zhuǎn)化為數(shù)值的函數(shù):Number(),parseInt()parseFloat()。在使用 parseInt() 轉(zhuǎn)換數(shù)據(jù)類(lèi)型時(shí),為了避免錯(cuò)誤解析,建議無(wú)論何時(shí)都要明確指定基數(shù)。多數(shù)情況下我們要解析的都是是進(jìn)制數(shù),因此始終將 10 作為第二個(gè)參數(shù)是十分必要的。

var num1 = Number("Hello world!");  //NaN
var num2 = Number("");              //0
var num3 = Number("000011");        //11
var num4 = Number(true);            //1

alert(num1);
alert(num2);
alert(num3);
alert(num4);
var num1 = praseInt("10", 2);       //2   (按二進(jìn)制解析)
var num1 = praseInt("10", 8);       //8   (按八進(jìn)制解析)
var num1 = praseInt("10", 10);      //10  (按十進(jìn)制解析)
var num1 = praseInt("10", 16);      //16  (按十六進(jìn)制解析)

parseFloat() 只解析十進(jìn)制值,所以其沒(méi)有第二個(gè)參數(shù)。

var num1 = parseFloat("1234blue");    //1234 - integer
var num2 = parseFloat("0xA");         //0
var num3 = parseFloat("22.5");        //22.5
var num4 = parseFloat("22.34.5");     //22.34
var num5 = parseFloat("0908.5");      //908.5
var num6 = parseFloat("3.125e7");     //31250000

alert(num1);
alert(num2);
alert(num3);
alert(num4);
alert(num5);
alert(num6);
String 類(lèi)型

字符串由雙引號(hào)或單引號(hào)表示都可以,在 ECMAScript 中的這兩種語(yǔ)言形式?jīng)]有什么區(qū)別。

任何字符串的長(zhǎng)度都可以通過(guò)訪問(wèn)其 length 屬性取得,如果字符串中包含雙字節(jié)字符,那么 length 屬性可能不會(huì)精確的返回字符串中的字符數(shù)目。

var text = "This is the letter sigma: u030a.";
alert(text.length);   //輸出 28

ECMAScript 中的字符串是不可變的,如果要改變某個(gè)變量保存的字符串,首先要銷(xiāo)毀原來(lái)的字符串,然后再用另一個(gè)包含新值的字符串填充該變量,這個(gè)過(guò)程是在后臺(tái)完成的,這也就是某些舊版本瀏覽器在拼接字符串的時(shí)候速度很慢的原因了。

要把一個(gè)值轉(zhuǎn)換為字符串有兩種方法,第一種是 toString() 方法。數(shù)值、布爾值、對(duì)象和字符串值都有相應(yīng)的 toString() 方法,但是 nullundefined 值沒(méi)有。一般調(diào)用 toString() 方法時(shí)不用傳遞參數(shù),但是他也可以傳遞參數(shù)。

var age = 11;
var ageAsString = age.toString();    //the string "11"
var found = true;
var foundAsString = found.toString(); //the string "true"

alert(ageAsString);
alert(typeof ageAsString);
alert(foundAsString);
alert(typeof foundAsString);
var num = 10;
alert(num.toString());       //"10"
alert(num.toString(2));      //"1010"
alert(num.toString(8));      //"12"
alert(num.toString(10));     //"10"
alert(num.toString(16));     //"a"

在不知道要轉(zhuǎn)換的值是不是 nullundefined 的情況下可以使用第二種方法:轉(zhuǎn)型函數(shù) String()。使用這種方法時(shí),如果值有 toString() 方法則會(huì)調(diào)用該方法,沒(méi)有的話就按本方法規(guī)則執(zhí)行。

var value1 = 10;
var value2 = true;
var value3 = null;
var value4;

alert(String(value1));     //"10"
alert(String(value2));     //"true"
alert(String(value3));     //"null"
alert(String(value4));     //"undefined"
Object 類(lèi)型

ECMAScript 中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合。

var o = new Object();


操作符

在 ECMAScript 中,當(dāng)對(duì)數(shù)值應(yīng)用位操作符時(shí),后臺(tái)發(fā)生如下的轉(zhuǎn)換過(guò)程:64 位的數(shù)值被轉(zhuǎn)換為 32 位數(shù)值,然后執(zhí)行位操作,最后再將 32 位的結(jié)果轉(zhuǎn)換回 64 位數(shù)值。但是這個(gè)轉(zhuǎn)換過(guò)程會(huì)導(dǎo)致特殊的 NaN 和 Infinity 值應(yīng)用位操作時(shí),這兩個(gè)值會(huì)被當(dāng)成 0 來(lái)處理。對(duì)非數(shù)值可以先使用 Number() 函數(shù)將該值轉(zhuǎn)換為一個(gè)數(shù)值,然后再應(yīng)用位操作。

var num1 = 25;             //binary 00000000000000000000000000011001
var num2 = ~num1;          //binary 11111111111111111111111111100110
alert(num2);               //-26

按位非操作的本質(zhì)就是操作數(shù)的負(fù)值減一。

左移操作:左移操作符為 <<,左移不會(huì)影響操作數(shù)的符號(hào)位。

var oldValue = 2;             //equal to binary 10
var newValue = oldValue << 5; //equal to binary 1000000 which is decimal 64
alert(newValue);              //64

右移操作分為有符號(hào) >> 和無(wú)符號(hào) >>> 兩種。對(duì)于正數(shù)來(lái)說(shuō),這兩種方法的結(jié)果一樣。但對(duì)于負(fù)數(shù)來(lái)說(shuō),無(wú)符號(hào)右移是以 0 填充空位,而不是像有符號(hào)右移那樣以符號(hào)位的值來(lái)填充空位。

var oldValue = -64;              //equal to binary 11111111111111111111111111000000
var newValue = oldValue >>> 5;   //equal to decimal 134217726
alert(newValue);                 //134217726

我們可以利用邏輯或的行為特性來(lái)避免為變量賦 nullundefined 值。例如:

var myObject = preferredObject || backupObject;

上面這段代碼,如果 preferredObject 的值不是 null,那么它的值將被賦給 myObject;如果是 null,則將 backupObject 的值賦給 myObject。ECMAScript 程序的賦值語(yǔ)句常用這種模式。

加性操作符有以下特性:+0+0 結(jié)果為 +0;-0-0 結(jié)果為 -0;+0-0 結(jié)果為 +0。如果兩個(gè)操作數(shù)都是字符串,則將第二個(gè)操作數(shù)與第一個(gè)操作數(shù)拼接起來(lái)。如果只有一個(gè)操作數(shù)是字符串,則將另一個(gè)操作數(shù)轉(zhuǎn)換為字符串,然后再將兩個(gè)字符串拼接起來(lái)。

var result1 = 5 + 5;     //two numbers
alert(result1);           //10
var result2 = 5 + "5";   //a number and a string
alert(result2);           //"55"
var num1 = 5;
var num2 = 10;
var message = "The sum of 5 and 10 is " + num1 + num2;
alert(message);    //"The sum of 5 and 10 is 510"
var num1 = 5;
var num2 = 10;
var message = "The sum of 5 and 10 is " + (num1 + num2);
alert(message);    //"The sum of 5 and 10 is 15"

減性操作符有以下特性:+0+0 結(jié)果為 +0;-0+0 結(jié)果為 -0-0+0 結(jié)果為 +0。

var result1 = 5 - true;    //4 because true is converted to 1
var result2 = NaN - 1;     //NaN
var result3 = 5 - 3;       //2
var result4 = 5 - "";      //5 because "" is converted to 0
var result5 = 5 - "2";     //3 because "2" is converted to 2
var result6 = 5 - null;    //5 because null is converted to 0

相等操作符有相等 == 和不相等 !=、全等 === 和不全等 !== 兩種。前者先轉(zhuǎn)換再比較,后者僅比較不轉(zhuǎn)換。除此之外無(wú)區(qū)別。轉(zhuǎn)換指轉(zhuǎn)換成數(shù)值。

var result1 = ("55" == 55);    //true ?equal because of conversion
var result2 = ("55" === 55);   //false ?not equal because different data types

var result3 = ("55" != 55);    //false ?equal because of conversion
var result4 = ("55" !== 55);   //true ?not equal because different data types

alert(null == undefined);    //true
alert(null === undefined);   //false

alert("NaN" == NaN);        //false
alert("NaN" === NaN);       //false
alert(NaN == NaN);          //false
alert(NaN === NaN);         //false
alert(NaN != NaN);          //true
alert(NaN !== NaN);         //true

alert(false == 0);          //true
alert(false === 0);         //false
alert(true == 1);           //true
alert(true === 1);          //false

alert(null == 0);           //false
alert(undefined == 0);      //false

alert(5 == "5");            //true
alert(5 === "5");           //false

注意:null == undefined 會(huì)返回 true,而 null === undefined 會(huì)返回 false,因?yàn)樗麄兪遣煌?lèi)型的值。由于相等和不相等操作符存在類(lèi)型轉(zhuǎn)換問(wèn)題,而為了保持代碼中數(shù)據(jù)類(lèi)型的完整性,我們推薦使用全等和不全等操作符。

條件操作符:

var max = (num1 > num2) ? num1 : num2;


語(yǔ)句

if 語(yǔ)句do-while 語(yǔ)句、while 語(yǔ)句、for 語(yǔ)句、for-in 語(yǔ)句lable 語(yǔ)句、break 和 continue 語(yǔ)句、with 語(yǔ)句、switch 語(yǔ)句。

因?yàn)?ECMAScript 中不存在塊級(jí)作用域,因此在循環(huán)內(nèi)部定義的變量也可以在外部訪問(wèn)到。例如:

var count = 10;
for (var i=0; i < count; i++){
    alert(i);
}
alert(i);    //10

for-in語(yǔ)句是一種精準(zhǔn)的迭代語(yǔ)句,可以用來(lái)枚舉對(duì)象屬性。用法是:

for (property in wxpression) statement

下面是一個(gè)示例:這個(gè)例子循環(huán)顯示 BOM 中 window 對(duì)象的所有屬性。

for (var propName in window) {
  document.wright(propName);
}

如果要迭代的對(duì)象的變量值為 nullundefined,for-in 語(yǔ)句會(huì)拋出錯(cuò)誤。ECMAScript 5 已經(jīng)更正了這一行為,對(duì)這種情況不再拋出錯(cuò)誤,而只是不執(zhí)行循環(huán)體。為了保證最大限度兼容性,建議在使用 for-in 循環(huán)之前先檢查確認(rèn)該對(duì)象的值不是 nullundefined

lable 語(yǔ)句可以在代碼中添加標(biāo)簽,以便將來(lái)使用。語(yǔ)法為:

lable: statement;

代碼示例:這個(gè)例子中定義的 start 標(biāo)簽可以在將來(lái)由 breakcontinue 語(yǔ)句引用。加標(biāo)簽的語(yǔ)句一般都要與 for 語(yǔ)句等循環(huán)語(yǔ)句配合使用。

start: for (var - = 0; i < count; i++) {
}

下面這段代碼使得 break 語(yǔ)句不僅會(huì)退出內(nèi)部的 for 語(yǔ)句,而且也會(huì)退出外部的 for 語(yǔ)句。

var num = 0;
        
outermost:
for (var i=0; i < 10; i++) {
  for (var j=0; j < 10; j++) {
    if (i == 5 && j == 5) {
      break outermost;
    }
    num++;
  }
}

alert(num);    //55
var num = 0;
        
outermost:
for (var i=0; i < 10; i++) {
  for (var j=0; j < 10; j++) {
    if (i == 5 && j == 5) {
        continue outermost;
    }
    num++;
  }
}

alert(num);    //95

with 語(yǔ)句的作用是將代碼的作用域設(shè)置到一個(gè)特定的對(duì)象中,語(yǔ)法如下:

with (expression) statement;

定義 with 語(yǔ)句的目的是簡(jiǎn)化多次編寫(xiě)同一個(gè)對(duì)象的工作,如下面的例子所示:

var qs = location.search.substring(1);
var hostName = location.hostname;
var url = location.href;

with 語(yǔ)句寫(xiě)的話就可以簡(jiǎn)化成下面這樣:

with (location) {
  var qs = search.substring(1);
  var hostName = hostname;
  var url = href;
}

注意:嚴(yán)格模式下不允許使用 with 語(yǔ)句,否則將視為語(yǔ)法錯(cuò)誤。同時(shí),大量使用這種語(yǔ)句會(huì)導(dǎo)致性能下降,同時(shí)也會(huì)給調(diào)試代碼造成困難,因此在開(kāi)發(fā)大型應(yīng)用程序時(shí)不建議使用 with 語(yǔ)句。

switch 語(yǔ)句,雖然 ECMAScript 的 switch 語(yǔ)句是借鑒其他語(yǔ)言的,但是也有其特色??梢栽?ECMAScript 的 switch 語(yǔ)句中使用任何數(shù)據(jù)類(lèi)型。其次,每一個(gè) case 的值不一定是常量,可以是變量,也可以是表達(dá)式。

switch ("hello world") {
  case "hello" + " world": 
    alert("Greeting was found.");
    break;
  case "goodbye": 
    alert("Closing was found.");
    break;
  default: 
    alert("Unexpected message was found.");
}
var num = 25;
switch (true) {
  case num < 0: 
    alert("Less than 0.");
    break;
  case num >= 0 && num <= 10: 
    alert("Between 0 and 10.");
    break;
  case num > 10 && num <= 20: 
    alert("Between 10 and 20.");
    break;
  default: 
    alert("More than 20.");
}


函數(shù)

對(duì)于函數(shù)的返回值,推薦的做法是要么讓函數(shù)始終都返回一個(gè)值,要么永遠(yuǎn)都不要返回值,否則,如果函數(shù)有時(shí)候返回值,有時(shí)候不返回值,會(huì)給調(diào)試代碼帶來(lái)不便。

ECMAScript 不介意你傳遞的參數(shù)個(gè)數(shù)和參數(shù)的數(shù)據(jù)類(lèi)型,因?yàn)?ECMAScript 中的參數(shù)只在內(nèi)部是一個(gè)數(shù)組來(lái)表示的。實(shí)際上在函數(shù)體內(nèi)可以通過(guò) arguments 對(duì)象來(lái)訪問(wèn)這個(gè)參數(shù)數(shù)組,從而獲得傳遞給函數(shù)的每一個(gè)參數(shù)。arguments 對(duì)象只是與數(shù)組類(lèi)似但并不是 Array 的實(shí)例。

沒(méi)有傳遞值的命名參數(shù)將自動(dòng)被賦予 undefined 值,這就和定義變量但為初始化類(lèi)似。

在 ECMAScript 中,定義了兩個(gè)名字相同的函數(shù),則該名字只屬于后定義的函數(shù)。

歡迎大家在評(píng)論區(qū)留下你的想法和感受!

歡迎大家關(guān)注知乎專(zhuān)欄:全棧成長(zhǎng)之路

文章保質(zhì)保量 (づ ̄3 ̄)づ╭?~

也歡迎大家加入學(xué)習(xí)交流QQ群:637481811


本文首發(fā)于我的 個(gè)人網(wǎng)站 LeviDing ,更多內(nèi)容歡迎關(guān)注我的個(gè)人網(wǎng)站。
歡迎掃描上方二維碼關(guān)注 公眾號(hào): LeviDing 訂閱實(shí)時(shí)動(dòng)態(tài)。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/112183.html

相關(guān)文章

  • Awe JavaScript [1] 基本概念

    摘要:年,以為藍(lán)本的建議被提交給了歐洲計(jì)算機(jī)制造商協(xié)會(huì),。而且給未經(jīng)聲明的變量賦值在嚴(yán)格模式下會(huì)導(dǎo)致拋出的錯(cuò)誤。這也正是使用操作符檢測(cè)值時(shí)會(huì)返回的原因。函數(shù)檢查過(guò)程是。但是這個(gè)轉(zhuǎn)換過(guò)程會(huì)導(dǎo)致特殊的和值應(yīng)用位操作時(shí),這兩個(gè)值會(huì)被當(dāng)成來(lái)處理。 前言 本文是 Awesome JavaScript 系列文章的第一篇,本系列文章主要為 JavaScript 的一些常見(jiàn)知識(shí)點(diǎn),是我在 JavaScrip...

    CloudwiseAPM 評(píng)論0 收藏0
  • Awe JavaScript [1] 基本概念

    摘要:年,以為藍(lán)本的建議被提交給了歐洲計(jì)算機(jī)制造商協(xié)會(huì),。而且給未經(jīng)聲明的變量賦值在嚴(yán)格模式下會(huì)導(dǎo)致拋出的錯(cuò)誤。這也正是使用操作符檢測(cè)值時(shí)會(huì)返回的原因。函數(shù)檢查過(guò)程是。但是這個(gè)轉(zhuǎn)換過(guò)程會(huì)導(dǎo)致特殊的和值應(yīng)用位操作時(shí),這兩個(gè)值會(huì)被當(dāng)成來(lái)處理。 前言 本文是 Awesome JavaScript 系列文章的第一篇,本系列文章主要為 JavaScript 的一些常見(jiàn)知識(shí)點(diǎn),是我在 JavaScrip...

    tomato 評(píng)論0 收藏0
  • 云犀推出“云拍攝”服務(wù) 助力AWE峰會(huì)

    摘要:與此同時(shí)云犀利用強(qiáng)大的內(nèi)容分發(fā)技術(shù)實(shí)現(xiàn)同一場(chǎng)活動(dòng)多平臺(tái)同步直播在微博微信今日頭條等新媒體平臺(tái)引發(fā)廣泛的話題討論。而云犀的智能字幕實(shí)時(shí)剪輯等技術(shù)也讓錯(cuò)過(guò)峰會(huì)直播的網(wǎng)民通過(guò)短視頻觀看精彩回放實(shí)現(xiàn)了峰會(huì)活動(dòng)宣傳的二次傳播。2018年3月8日,在全球矚目的中國(guó)家電及消費(fèi)電子博覽會(huì)(AWE2018)上,云犀與AWE深度合作,為本次峰會(huì)提供拍攝、直播、視頻制作等服務(wù);云拍攝團(tuán)隊(duì)派出15位專(zhuān)業(yè)簽約攝影攝像...

    liangzai_cool 評(píng)論0 收藏0
  • 分享一個(gè)可用于拖動(dòng)排序的vue組件

    摘要:最近要做拖拽相關(guān)的功能,本來(lái)想自己寫(xiě),忽然想起來(lái)之前在輪子工廠有更新過(guò),還是很好用滴。介紹一款可任意拖動(dòng)排序的插件。支持桌面和移動(dòng)端,拖拽過(guò)渡動(dòng)畫(huà)美觀。 最近要做拖拽相關(guān)的功能,本來(lái)想自己寫(xiě),忽然想起來(lái)之前在輪子工廠有更新過(guò),vue-dragging還是很好用滴。 介紹 vue-dragging -- 一款可任意拖動(dòng)排序的vue插件。支持桌面和移動(dòng)端,拖拽過(guò)渡動(dòng)畫(huà)美觀。支持vue1和v...

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

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

0條評(píng)論

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