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

資訊專欄INFORMATION COLUMN

Javascript 嚴(yán)格模式特點(diǎn)

darry / 1652人閱讀

以下是嚴(yán)格模式中需要注意的用法,這里需要強(qiáng)調(diào)的是:ES6 的 class 和 模塊內(nèi)都是默認(rèn)的嚴(yán)格模式。其實(shí),js 開發(fā)也會(huì)逐步走向嚴(yán)格模式,這應(yīng)該是個(gè)趨勢。

添加了保留字 protected,static 和 interface 在嚴(yán)格模式下,不可以用with()
(function(){
  //非嚴(yán)格模式
  var a = {name: "Bob"};
  with(a){
    name = "Lily";
  }
  console.log(a.name);  //Lily
})();

(function(){
  "use strict";   //嚴(yán)格模式
  var a = {name: "Bob"}, b = {};
  with(a, b){    //SyntaxError: Strict mode code may not include a with statement
    name = "Lily";
  }
  console.log(a.name);
})();
在嚴(yán)格模式下,變量必須顯示聲明(var/let/const)
(function(){
  //非嚴(yán)格模式
  a = 10;
  console.log(a);  //10
})();

(function(){
  "use strict";   //嚴(yán)格模式
  b = 10;   //ReferenceError: b is not defined
  console.log(b);
})();
在嚴(yán)格模式下,this默認(rèn)是undefined
(function(){
  //非嚴(yán)格模式
  console.log(this);  //window
})();

(function(){
  "use strict";   //嚴(yán)格模式
  console.log(this);    //undefined
})();
在嚴(yán)格模式下,為只讀變量和不可擴(kuò)展對(duì)象賦值會(huì)報(bào)錯(cuò), 而不是靜默失敗
(function(){
  //非嚴(yán)格模式
  var o = {
    name: "Lily"
  };
  Object.freeze(o);
  o.name = "Bob";
  o.age = 20;
  console.log(o);  //Object {name: "Bob"}
})();

(function(){
  "use strict";   //嚴(yán)格模式
    var o = {
    name: "Lily"
  };
  Object.freeze(o);
  o.name = "Bob";  //TypeError: Cannot assign to read only property "name" of object "#"
  o.age = 20;  //TypeError: Can"t add property age, object is not extensible
  console.log(o);
})();
在嚴(yán)格模式下,不可以在eval參數(shù)中定義變量和函數(shù)
(function(){
  //非嚴(yán)格模式
  var str1 = "var name="Lily";";
  var str2 = "function fun1(){console.log("hello");}";
  eval(str1);   //這個(gè)name定義在了全局,而不是函數(shù)內(nèi)
  eval(str2);
  console.log(name);   //Lily
  fun1();    //hello
})();

(function(){
  "use strict";   //嚴(yán)格模式
  var str1 = "var alias="Lily";";
  var str2 = "function fun2(){console.log("hello");}";
  eval(str1);
  eval(str2);
  eval("name = "Bob"");    //修改全局變量name
  console.log(name);   //Bob
  console.log(alias);    //ReferenceError: alias is not defined
  fun2();    //ReferenceError: fun is not defined
})();
在嚴(yán)格模式下,有名參數(shù)是arguments參數(shù)的靜態(tài)副本,而非引用。
(function(){
  //非嚴(yán)格模式
  var name = "Bob";
  test(name);

  function test(alias){
    alias = "Lily";
    console.log(alias);  //Lily
    console.log(arguments[0]);  //Lily
  }
})();

(function(){
  "use strict";   //嚴(yán)格模式
  var name = "Bob";
  test(name);

  function test(alias){
    alias = "Lily";
    console.log(alias);  //Lily
    console.log(arguments[0]);  //Bob
  }
})();
在嚴(yán)格模式下,用delete刪除var聲明的變量和不可配置屬性時(shí)拋出異常,而不是靜默失?。ǚ祷豧alse)
(function(){
  //非嚴(yán)格模式
  var a = 10;
  var fun = function(){console.log("fun called");};
  var o = Object.defineProperty({}, "name", {
    value: "Bob"
  });   //默認(rèn)即不可配置
  delete a;   //false
  console.log(a);  //10

  delete fun;   //false
  fun();  //fun called

  delete o.name;   //false
  console.log(o.name);  //Bob

  //刪除一個(gè)不存在的變量
  delete no;  //false

})();

(function(){
  "use strict";   //嚴(yán)格模式
  var a = 10;
  var fun = function(){console.log("fun called");};
  var o = Object.defineProperty({}, "name", {
    value: "Bob"
  });   //默認(rèn)即不可配置
  //delete a;   //SyntaxError: Delete of an unqualified identifier in strict mode.
  console.log(a);

  delete fun;  //SyntaxError: Delete of an unqualified identifier in strict mode.
  fun();

  delete o.name;  //SyntaxError: Delete of an unqualified identifier in strict mode.
  console.log(o.name);

  //刪除一個(gè)不存在的變量
  delete no;  //SyntaxError: Delete of an unqualified identifier in strict mode.

})();
在嚴(yán)格模式下,arguments和eval是關(guān)鍵字,不能被修改
(function(){
  //非嚴(yán)格模式
  eval = 10;
  eval("console.log("hello");");  //TypeError: eval is not a function

  (function(){
    arguments = 20;
    console.log(arguments);   //20
  }());

})();

(function(){
  "use strict";   //嚴(yán)格模式
  eval = 10;  //SyntaxError: Unexpected eval or arguments in strict mode
  eval("console.log("hello");");

  (function(){
  arguments =20;  //SyntaxError: Unexpected eval or arguments in strict mode
    console.log(arguments);
  }());

})();
在嚴(yán)格模式下,不可以用8進(jìn)制
(function(){
  //非嚴(yán)格模式
  console.log(070);  //56 (因?yàn)g覽器而異)
})();

(function(){
  "use strict";   //嚴(yán)格模式
  console.log(070);  //SyntaxError: Octal literals are not allowed in strict mode.
})();
在嚴(yán)格模式下,函數(shù)的形參不可以同名
(function(){
  //非嚴(yán)格模式
  var one = 1;
  var two = 2;
  fun(one, two);   //2
  function fun(a,a){
    console.log(a);
  }
})();

(function(){
  "use strict";   //嚴(yán)格模式
  var one = 1;
  var two = 2;
  fun(one, two);
  function fun(a,a){  //SyntaxError: Duplicate parameter name not allowed in this context
    console.log(a);
  }
})();
在嚴(yán)格模式下,不可以使用caller和arguments的屬性,會(huì)報(bào)錯(cuò)
(function(){
  //非嚴(yán)格模式
  A();

  function A(){
    B();
  }
  function B(){
    console.log(B.caller);   //function A(){ B(); }
    console.log(arguments.callee);    //function B(){ console.log(B.caller); console.log(arguments.callee); }
  }
})();

(function(){
  "use strict";   //嚴(yán)格模式
  A();

  function A(){
    B();
  }
  function B(){
    console.log(B.caller);   //TypeError: "caller" and "arguments" are restricted function properties and cannot be accessed in this context.
    console.log(arguments.callee);    //TypeError: "caller", "callee", and "arguments" properties may not be accessed on strict mode functions or the arguments objects for calls to them
  }

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

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

相關(guān)文章

  • javascript-函數(shù)表達(dá)式

    摘要:函數(shù)表達(dá)式定義函數(shù)表達(dá)式區(qū)別于函數(shù)聲明,也是一種定義函數(shù)的方式,形似與變量賦值,這個(gè)值就是函數(shù)體,例如函數(shù)表達(dá)式之匿名函數(shù)函數(shù)表達(dá)式之具名函數(shù)匿名函數(shù)之立即執(zhí)行函數(shù)目前知道的是這三種形式,希望高人補(bǔ)充特點(diǎn)區(qū)別于函數(shù)聲明,和普通變量一樣使用前 函數(shù)表達(dá)式 定義:函數(shù)表達(dá)式區(qū)別于函數(shù)聲明,也是一種定義函數(shù)的方式,形似與變量賦值,這個(gè)值就是函數(shù)體,例如: var a = function...

    bingchen 評(píng)論0 收藏0
  • 1.你不知道的JavaScript-嚴(yán)格模式

    摘要:針對(duì)單個(gè)函數(shù)將放在函數(shù)體的第一行,則整個(gè)函數(shù)以嚴(yán)格模式運(yùn)行。嚴(yán)格模式禁止這種用法,全局變量必須顯式聲明。嚴(yán)格模式下,這屬于語法錯(cuò)誤。嚴(yán)格模式禁止這種表示法,整數(shù)第一位為,將報(bào)錯(cuò)。也就是說,不允許在非函數(shù)的代碼塊內(nèi)聲明函數(shù)。 本文轉(zhuǎn)自【阮一峰博客】:http://www.ruanyifeng.com/blo... 一、概述 除了正常運(yùn)行模式,ECMAscript 5添加了第二種運(yùn)行模式:...

    FuisonDesign 評(píng)論0 收藏0
  • 【前端面試】變量和類型計(jì)算

    摘要:題目使用能得到哪些類型和的選擇中有哪些內(nèi)置函數(shù)變量按存儲(chǔ)方式分為哪些類型,并描述其特點(diǎn)如何理解知識(shí)點(diǎn)值類型和引用類型值類型引用類型對(duì)象,數(shù)組,函數(shù)值類型直接把值存儲(chǔ)在堆中,把賦值給在內(nèi)存中是又給開辟了一塊新的空間,存儲(chǔ)了同樣的值。 1.題目 1.JS使用typeof能得到哪些類型 === 和 == 的選擇 JS中有哪些內(nèi)置函數(shù) JS變量按存儲(chǔ)方式分為哪些類型,并描述其特點(diǎn) 如何理解J...

    DoINsiSt 評(píng)論0 收藏0
  • JavaScript中的函數(shù)

    摘要:然后最后一步就是從父作用域鏈中將該特殊對(duì)象刪除,整個(gè)過程的偽代碼如下注意這里,該屬性不能刪除,只讀。 起因是我在逛sf的時(shí)候看到了一個(gè)人的提問: 為什么將函數(shù)c賦值給變量b,在函數(shù)體里面,給c賦值,為什么會(huì)失敗?也就是這代碼執(zhí)行時(shí)為什么c打印出來的不是3 var b = function c () { a=1, b=2, c=3; console.log(a); ...

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

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

0條評(píng)論

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