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

資訊專(zhuān)欄INFORMATION COLUMN

JavaScript 之 面向?qū)ο?[ 嚴(yán)格模式 ]

zsirfs / 2162人閱讀

摘要:嚴(yán)格模式描述嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中嚴(yán)格模式是對(duì)代碼的一種限制方式嚴(yán)格模式可以將不明確顯示的錯(cuò)誤轉(zhuǎn)變成明確顯示嚴(yán)格模式可以修正一些解釋器難以優(yōu)化的錯(cuò)誤嚴(yán)格模式下的變量禁止意外創(chuàng)建變量沒(méi)有開(kāi)啟嚴(yán)格模式時(shí)在調(diào)用該變量時(shí),

嚴(yán)格模式 描述

嚴(yán)格模式可以分別作用在全局作用域中和函數(shù)作用域中

嚴(yán)格模式是對(duì)JavaScript代碼的一種限制方式

嚴(yán)格模式可以將不明確顯示的錯(cuò)誤轉(zhuǎn)變成明確顯示

嚴(yán)格模式可以修正一些解釋器難以優(yōu)化的錯(cuò)誤

嚴(yán)格模式下的變量 禁止意外創(chuàng)建變量

沒(méi)有開(kāi)啟嚴(yán)格模式時(shí)

在調(diào)用該變量時(shí),不會(huì)報(bào)錯(cuò)

解釋器會(huì)自動(dòng)補(bǔ)全 var關(guān)鍵字

開(kāi)啟嚴(yán)格模式時(shí)

在調(diào)用該變量時(shí),會(huì)報(bào)錯(cuò)

顯示 ReferenceError: s is not defined

/* 開(kāi)啟嚴(yán)格模式 - 全局作用域 */
"use strict";

/* 定義一個(gè)變量 - 不使用 var關(guān)鍵字 */
s = 100;
/*
    沒(méi)有開(kāi)啟嚴(yán)格模式時(shí)
     * 在調(diào)用該變量時(shí),不會(huì)報(bào)錯(cuò)
     * 解釋器會(huì)自動(dòng)補(bǔ)全 var關(guān)鍵字
    開(kāi)啟嚴(yán)格模式時(shí)
     * 在調(diào)用該變量時(shí),會(huì)報(bào)錯(cuò)
     * 顯示 ReferenceError: s is not defined(該變量沒(méi)有被定義)
 */
console.log( s );// 顯示 100 - 開(kāi)啟嚴(yán)格模式后的顯示 s is not defined(報(bào)錯(cuò))

* 定義一個(gè)函數(shù) */
function fun() {
    /* 定義一個(gè)變量 - 不使用var關(guān)鍵字 */
    s = 100;
    console.log( s );
}
/* 調(diào)用函數(shù) */
fun();// 顯示 100
/*
    在未開(kāi)啟嚴(yán)格模式的情況下
     * 在函數(shù)作用域中,不使用var關(guān)鍵字定義的變量,會(huì)自動(dòng)從局部變量提升到全局變量
    在開(kāi)啟嚴(yán)格模式的情況下
     * 在函數(shù)作用域中,不使用var關(guān)鍵字定義的變量,會(huì)報(bào)錯(cuò)
 */
/* 在全局作用域訪問(wèn)函數(shù)作用域中的局部變量 */
console.log( s );// 顯示 100 開(kāi)啟嚴(yán)格模式后的顯示 ReferenceError: s is not defined(報(bào)錯(cuò))
靜默失敗轉(zhuǎn)為異常

靜默表示既不報(bào)錯(cuò)也不顯示任何效果

在嚴(yán)格模式下,靜默失敗會(huì)轉(zhuǎn)為報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)常量 */
const c = 100;
/* 對(duì)常量重新賦值 */
c = 200;

/* 開(kāi)啟嚴(yán)格模式后會(huì)將靜默失敗轉(zhuǎn)成報(bào)錯(cuò) */
console.log( c );// 顯示 TypeError: Assignment to constant variable.
禁用delete關(guān)鍵字

在非嚴(yán)格模式下,對(duì)變量使用delete 會(huì)靜默失敗

在嚴(yán)格模式下,對(duì)變量使用delete 會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)變量 */
var s = 100;
/*
    對(duì)變量使用delete
     * 在非嚴(yán)格模式下delete 會(huì)無(wú)效
     * 在嚴(yán)格模式下會(huì)報(bào)錯(cuò) SyntaxError: Delete of an unqualified identifier in strict mode.
 */
delete s;
/* 在調(diào)用該變量 */
console.log( s );// 顯示 100 ,在嚴(yán)格模式下會(huì)報(bào)錯(cuò) Delete of an unqualified identifier in strict mode.
對(duì)變量名的限制

在非嚴(yán)格模式下,定義變量名時(shí),使用保留字,會(huì)正常顯示或靜默失敗

在嚴(yán)格模式下,定義變量名是,使用保留字,會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)變量 - 使用保留字定義變量名 */
var let = 100;
console.log( let );
/*
    非嚴(yán)格模式 顯示 100
    嚴(yán)格模式 顯示 SyntaxError: Unexpected strict mode reserved word
 */
嚴(yán)格模式下的對(duì)象 不可刪除的屬性

在非嚴(yán)格模式下,使用delete去刪除不可刪除的屬性時(shí),會(huì)靜默失敗

在嚴(yán)格模式下,使用delete去刪除不可刪除的屬性時(shí),會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 使用delete 刪除Object對(duì)象的原型屬性 */
delete Object.prototype;
/* 在調(diào)用Object對(duì)象的原型屬性 */
console.log( Object.prototype );
/*
    非嚴(yán)格模式下 顯示 {}(正常顯示一個(gè)空對(duì)象)
    嚴(yán)格模式下 顯示 TypeError: Cannot delete property "prototype" of function Object() { [native code] }
 */
屬性名必須唯一

在非嚴(yán)格模式下,對(duì)象的屬性名允許重復(fù),會(huì)執(zhí)行最后一次定義的內(nèi)容

在嚴(yán)格模式下,對(duì)象的屬性名重復(fù)時(shí),編輯器會(huì)報(bào)錯(cuò),但是會(huì)正常運(yùn)行最后一次定義的內(nèi)容

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)對(duì)象 */
var obj = {
    name : "融念冰",
    name : "唐三"
}
/* 調(diào)用對(duì)象的屬性 */
console.log( obj.name );
/*
    非嚴(yán)格模式下 顯示 唐三
    嚴(yán)格模式下 顯示 唐三
 */
只讀屬性的賦值

在非嚴(yán)格模式下,對(duì)只讀屬性進(jìn)行從新賦值,會(huì)靜默失敗

在嚴(yán)格模式下,對(duì)只讀屬性進(jìn)行重新賦值,會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)對(duì)象 */
var obj = {
    name : "唐三"
};
/* 獲取指定屬性的屬性描述符 - 將屬性改為只讀屬性 */
Object.defineProperty( obj, "name", {
    /* 通過(guò)屬性描述符將指定屬性改為只讀 */
    writable : false
} );
/* 對(duì)指定屬性進(jìn)行修改 */
obj.name = "融念冰";
/* 調(diào)用屬性 */
console.log( obj.name );
/*
    非嚴(yán)格模式下 顯示 唐三(無(wú)法修改屬性)
    嚴(yán)格模式下 顯示 TypeError: Cannot assign to read only property "name" of object "#"
 */
不可擴(kuò)展的對(duì)象

在非嚴(yán)格模式下,對(duì)不可擴(kuò)展的對(duì)象添加新屬性,會(huì)靜默失敗

在嚴(yán)格模式下,對(duì)不可擴(kuò)展的對(duì)象添加新屬性,會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)空對(duì)象 */
var obj = {};
/* 將指定對(duì)象設(shè)置為不可擴(kuò)展的對(duì)象 */
Object.preventExtensions( obj );
/* 為不可擴(kuò)展的對(duì)象新增屬性 */
obj.name = "唐三";
/* 調(diào)用對(duì)象 */
console.log( obj );
/*
    非嚴(yán)格模式下 顯示 {}(空對(duì)象)
    嚴(yán)格模式下 顯示 TypeError: Cannot add property name, object is not extensible
 */
嚴(yán)格模式下的函數(shù) 參數(shù)名必須唯一

在非嚴(yán)格模式下,參數(shù)名允許重復(fù),后面匹配的參數(shù)會(huì)覆蓋之前匹配的參數(shù)

在嚴(yán)格模式下,參數(shù)名重復(fù)時(shí),編輯器會(huì)提示報(bào)錯(cuò),運(yùn)行時(shí)也會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)函數(shù) */
function fun( a, a, b ) {
    console.log( a + a + b );
}
/* 調(diào)用函數(shù)并傳遞參數(shù) */
fun( 1, 2, 3 );
/*
    非嚴(yán)格模式下 顯示 7(2+2+3)
    嚴(yán)格模式下 顯示 SyntaxError: Duplicate parameter name not allowed in this context
 */
arguments的不同

在非嚴(yán)格模式下,arguments對(duì)象獲取參數(shù)的值與形參有關(guān)

嚴(yán)格模式下,arguments對(duì)象獲取參數(shù)的值與形參無(wú)關(guān)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)函數(shù) */
function fun( canshu ) {
    /* 定義局部變量 */
    var canshu = "唐三";
    /* 調(diào)用局部變量 */
    console.log( canshu );// 顯示 唐三

    /* 通過(guò)arguments獲取參數(shù) */
    console.log( arguments[0] );
    /*
        非嚴(yán)格模式下 顯示 唐三
         * 當(dāng)局部變量與參數(shù)同名時(shí),會(huì)根據(jù)就近原則進(jìn)行獲取
        嚴(yán)格模式下 顯示 融念冰
         * 只會(huì)獲取在調(diào)用函數(shù)時(shí)傳遞的實(shí)參
     */
}
/* 調(diào)用函數(shù)并傳遞參數(shù) */
fun( "融念冰" );
arguments對(duì)象的callee()方法

在非嚴(yán)格模式下,callee()方法表示當(dāng)前調(diào)用的函數(shù)

在嚴(yán)格模式下,arguments對(duì)象將無(wú)法調(diào)用callee()方法,會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義一個(gè)函數(shù) */
function fun() {
    /* 將callee()方法返回 */
    return arguments.callee;
}
/* 調(diào)用函數(shù) */
fun();
/*
    非嚴(yán)格模式下 顯示 (由于示例代碼的關(guān)系,所以沒(méi)用顯示)
    嚴(yán)格模式下 顯示 TypeError: "caller", "callee", and "arguments" properties may not be accessed on strict mode functions or the arguments objects for calls to them
 */
函數(shù)聲明的限制

在非嚴(yán)格模式下,函數(shù)可以在任何作用域下進(jìn)行定義

在嚴(yán)格模式下,函數(shù)只能在全局作用域和函數(shù)作用域下進(jìn)行定義

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 在全局作用域定義函數(shù) */
function fun() {
    /* 在函數(shù)作用域定義內(nèi)部函數(shù) */
    function fn() {

    }
}

/* 在 ES6 中新增了一個(gè)新的作用域 - 塊級(jí)作用域 */
for ( var i = 0 ; i < 10; i++ ) {
    // 該語(yǔ)句塊中就為塊級(jí)作用域

    /* 在塊級(jí)作用域中定義函數(shù) */
    function f() {
        console.log( "三步白頭" );
    }
}
/* 調(diào)用函數(shù) f */
f();
/*
    非嚴(yán)格模式下 顯示 三步白頭
    嚴(yán)格模式下 顯示 報(bào)錯(cuò)ReferenceError: f is not defined
 */
嚴(yán)格模式下的特殊值 增加eval作用域

在非嚴(yán)格模式下,eval()函數(shù)創(chuàng)建的變量可以在其他位置進(jìn)行調(diào)用

在嚴(yán)格模式下,eval()函數(shù)創(chuàng)建的變量只能在當(dāng)前eval()函數(shù)中使用,其他位置調(diào)用會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義eval()函數(shù) */
eval( "var s = "三步白頭"" );
/* 調(diào)用eval()函數(shù)中變量 */
console.log( s );
/*
    非嚴(yán)格模式下 顯示 三步白頭
    嚴(yán)格模式下 顯示 報(bào)錯(cuò)ReferenceError: s is not defined
 */
禁止讀寫(xiě)

在非嚴(yán)格模式下,使用 eval 或 arguments 做為標(biāo)識(shí)符(變量名、函數(shù)名、對(duì)象名)時(shí),會(huì)靜默失敗

在嚴(yán)格模式下,使用 eval 或 arguments 做為標(biāo)識(shí)符(變量名、函數(shù)名、對(duì)象名)時(shí),會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 使用 eval 或 arguments 做為標(biāo)識(shí)符 */
eval = 17;
arguments++;
++eval;
var obj = { set p(arguments) { } };
var eval;
try { } catch (arguments) { }
function x(eval) { }
function arguments() { }
var y = function eval() { };
var f = new Function("arguments", ""use strict"; return 17;");
/*
    非嚴(yán)格模式下 顯示 沒(méi)有顯示
    嚴(yán)格模式下 顯示 報(bào)錯(cuò) SyntaxError: Unexpected eval or arguments in strict mode
 */
抑制this

在非嚴(yán)格模式下,在函數(shù)使用apply()方法或call()方法來(lái)調(diào)用函數(shù)時(shí),使用null或undefined來(lái)代替this的指向?qū)ο髸r(shí),this會(huì)指向全局對(duì)象

在嚴(yán)格模式下,在函數(shù)使用apply()方法或call()方法來(lái)調(diào)用函數(shù)時(shí),使用null或undefined來(lái)代替this的指向?qū)ο髸r(shí),會(huì)報(bào)錯(cuò)

/* 開(kāi)啟嚴(yán)格模式 */
"use strict";

/* 定義全局變量 */
var s = 100;
/* 定義函數(shù) */
function fun() {
    console.log( this.s );
}
/* 使用appl()方法或call()方法來(lái)調(diào)用函數(shù) */
fun.apply( null );
/*
    非嚴(yán)格模式下 顯示 undefined(瀏覽器環(huán)境下 會(huì)指向全局變量 并顯示變量值 100)
    嚴(yán)格模式下 顯示 報(bào)錯(cuò) TypeError: Cannot read property "s" of null
 */

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

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

相關(guān)文章

  • JavaScript面向對(duì)象嚴(yán)格模式

    摘要:一嚴(yán)格模式概述嚴(yán)格模式是什么在中是種限制性更強(qiáng)變種方式,不是個(gè)子集,在語(yǔ)義上與正常代碼有明顯得差異嚴(yán)格模式和非嚴(yán)格模式可共存,可選擇性的加入嚴(yán)格模式嚴(yán)格模式的目的將把陷阱直接變?yōu)槊黠@錯(cuò)誤修正一些引擎難以優(yōu)化錯(cuò)誤,代碼有些時(shí)候嚴(yán)格模式會(huì)比非嚴(yán) JS(JavaScript)一.嚴(yán)格模式1.概述 嚴(yán)格模式是什么 在JS中是種限制性更強(qiáng)變種方式,不是個(gè)子集,在語(yǔ)義上與正常代碼有明顯得差異嚴(yán)格模...

    siberiawolf 評(píng)論0 收藏0
  • javascript 面向對(duì)象版塊對(duì)象屬性

    摘要:上一篇面向?qū)ο蟀鎵K之理解對(duì)象下一篇面向?qū)ο蟀鎵K之定義多個(gè)對(duì)象屬性以及讀取屬性特性 這是 javascript 面向?qū)ο蟀鎵K的第二篇文章,主要講解的是對(duì)象的屬性,首先創(chuàng)建一個(gè)對(duì)象: var person = { name: Nicholas, age: 29, job: Software Engineer, sayName: function () { conso...

    lolomaco 評(píng)論0 收藏0
  • javascript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐全書(shū)深度解析(一)前言

    摘要:相信很多人都看過(guò)設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐這本書(shū),每個(gè)人都有自己的體會(huì)感受,作為前端年開(kāi)發(fā)經(jīng)驗(yàn)的程序猿,用我自認(rèn)為還可以的實(shí)踐經(jīng)驗(yàn)來(lái)與大家談?wù)勥@本書(shū)。這章是前言,后面陸續(xù)會(huì)講解每個(gè)設(shè)計(jì)模式。 相信很多人都看過(guò)《javascript設(shè)計(jì)模式與開(kāi)發(fā)實(shí)踐》這本書(shū),每個(gè)人都有自己的體會(huì)感受,作為前端3年開(kāi)發(fā)經(jīng)驗(yàn)的程序猿,用我自認(rèn)為還可以的實(shí)踐經(jīng)驗(yàn)來(lái)與大家談?wù)勥@本書(shū)。這章是前言,后面陸續(xù)會(huì)講解每個(gè)設(shè)計(jì)模...

    timger 評(píng)論0 收藏0
  • JavaScript new 命令

    摘要:命令執(zhí)行時(shí),構(gòu)造函數(shù)內(nèi)部的,就代表了新生成的實(shí)例對(duì)象,表示實(shí)例對(duì)象有一個(gè)屬性,值是。因此,應(yīng)該非常小心,避免不使用命令直接調(diào)用構(gòu)造函數(shù)。命令返回這個(gè)對(duì)象,而不是對(duì)象。JavaScript 面向?qū)ο缶幊痰幕A(chǔ)知識(shí)篇 1 。 1. 概述 面向?qū)ο缶幊蹋∣bject Oriented Programming,縮寫(xiě)為 OOP)是目前主流的編程范式。 那么,對(duì)象(object)到底是什么? 對(duì)象是單...

    desdik 評(píng)論0 收藏0
  • JavaScriptarguments

    摘要:三的屬性屬性表示傳入函數(shù)的實(shí)際參數(shù)數(shù)量,而不是函數(shù)聲明時(shí)的形參數(shù)量。你好你好你好你好你好你好擴(kuò)展運(yùn)算符你好你好五嚴(yán)格模式嚴(yán)格模式和非嚴(yán)格模式中,的表現(xiàn)顯示不相同。而在嚴(yán)格模式中,實(shí)參和的值不會(huì)共享。 本文共 635 字,讀完只需 3 分鐘 概述 JavaScript中的函數(shù)與其他面向?qū)ο笳Z(yǔ)言有幾個(gè)不同的地方。 沒(méi)有函數(shù)重載 有一個(gè)表示實(shí)參列表的類(lèi)數(shù)組對(duì)象 arguments 一、...

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

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

0條評(píng)論

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