JavaScript严格模式 use strict中 的不可使用八进制和不可使用转义字符

 

 

"use strict";

var x = 010; //正常模式下,整数的第一位如果是0,表示这是八进制数,比如0100等于十进制的64。严格模式禁止这种表示法,整数第一位为0,将报错。


var x = \010; //非引号内只支持'\u'前缀的两种转义字符(\u{7A} \u007A),不支持无前缀和'\x'前缀的转义字符('\z' '\172' '\x7A');


x = 3.14; //不允许在未声明标识名的情况下使用标识名


var x = 3.14;

delete x;//不允许删除以声明方式创建的标识名(变量声明,函数声明),只可删除对象的属性


function x(p1, p1) {};//不允许重复参数名


var obj = {};

Object.defineProperty(obj, "x", {value:0, writable:false});

obj.x = 3.14; //不允许给只读属性赋值


var obj = {get x() {return 0} };

obj.x = 3.14; //不允许为只能获取的属性赋值


delete Object.prototype; //不允许删除不可删除的属性,比如内置对象


var eval = 3.14; //保留字不能作为变量名,只可作为属性

var arguments = 3.14; //内置对象不能作为变量名,只可作为属性


this;//严格模式中,顶层作用域中this的值不再是全局对象,此时它的值为 undefined。


eval ("var x = 2");

alert (x); //eval()创建的变量只能在eval内使用


with (Math){x = cos(2)}; //不允许使用with语句


__局部模式__

//类和模块的内部,默认就是严格模式,所以不需要使用use strict指定运行模式。只要你的代码写在类或模块之中,就只有严格模式可用。

 

x = 3.14; // 这不会引发错误

myFunction();

function myFunction() {

"use strict";//函数内部可以设定为严格模式。

y = 3.14; // 这会引发错误

};

 

const doSomething = function ({a=3, ...b}) {

'use strict';

};

//只要函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式,否则会报错。


第一种:全局性的严格模式;

'use strict';

function doSomething(a, b = a) {

// code

}


第二种:把函数包在一个无参数的立即执行函数里面;

const doSomething = (function () {

'use strict';

return function(value = 42) {

return value;

};

}());

//两种方法可以规避这种限制

 

function inner(){

console.log(arguments.callee.caller);

};

//严格模式下,arguments及其属性皆不可访问

 

function restricted() {

"use strict";

restricted.caller; // 报错

restricted.arguments; // 报错

};

//尾调用优化只在严格模式下开启,正常模式下的caller和arguments可跟踪函数的调用栈,故此两者在严格模式下不可用。

 

保留关键字

为了向将来Javascript的新版本过渡,严格模式新增了一些保留关键字:

  • implements
  • interface
  • let
  • package
  • private
  • protected
  • public
  • static
  • yield

本文参考知乎

八进制禁止部分的解析参考:

https://blog.csdn.net/ivan820819/article/details/8513431?utm_medium=distribute.pc_relevant_right.none-task-blog-OPENSEARCH-2.nonecase&depth_1-utm_source=distribute.pc_relevant_right.none-task-blog-OPENSEARCH-2.nonecase

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值