JavaScript 基础六 'use strict'严格模式下的规则
why 严格模式
[1] 消除js语法的一些不合理、不严谨、不安全问题,减少怪异行为并保证代码运行安全
[2] 提高编译器效率,增加运行速度
使用
[1]整个脚本启用严格模式,在顶部执行:"use strict";
[2]在指定函数中执行严格模式,在函数体第一行:"use strict"
[3]不支持strict模式的浏览器把"use strict"当做一个字符串语句执行,支持strict模式的浏览器将开启strict模式
[4]支持严格模式的浏览器包括IE10+、Firefox4+、safari12+、opera12+、chrome
规则
【1】变量
[a]不允许意外创建全局变量
"use strict";
message = 'hello world!';
[b]不能对变量调用delete操作符
"use strict";
var color = 'red';
delete color;
【2】对象
"use strict";
var person = {
name:'cook'
};
[a]不能为只读属性赋值
Object.defineProperty(person,'name',{
writable: false
});
person.name = 'Nicholas';
[b]不能为不可配置的属性使用delete操作
Object.defineProperty(person,'name',{
configurable: false
});
delete person.name;
【3】函数
[a]参数必须唯一
"use strict";
function sun(num,num){
//TODO
}
[b]修改形参不会反映到arguments中
function showValue(value){
value = "Foo";
alert(arguments[0]);
//非严格模式:"Foo"
//严格模式:"Hi"
}
showValue("Hi");
[c]不允许使用arguments.callee和arguments.caller
// callee是arguments对象的一个属性、用来指向当前执行的函数。
// caller是function对象的一个属性用于返回一个function引用、它返回调用它的function对象
"use strict";
function fn(num){
return arguments.callee(num);
}
fn(2); // 报错
function outer(){
inner();
}
function inner(){
alert(inner.caller());
}
outer(); // 报错
【4】不允许eval()在包含上下文中创建变量或函数
"use strict";
function fn(){
eval("var x=10");
alert(x);
}
fn(); // 报错
但是允许下面这样做
//允许以下操作
var result = eval("var x = 10, y = 11; x+y");
alert(result);//21
【5】不允许使用eval和arguments作为标识符,也不允许读写他们的值
"use strict";
var eval = 10;
var arguments = 20;
【6】不允许this值为null或undefined
"use strict";
var color = "red";
function fn(){
alert(this.color);
}
fn(); // 这样调用的话 this指向undefined 因此报错
new fn() // 这样调用的话 this指向实例对象 因此不会报错
【7】不允许使用with语句
"use strict";
with(location){
alert(href);
}
【8】不允许使用八进制字面量
"use strict";
var value = 010;
JavaScript 基础六 'use strict'严格模式下的规则的更多相关文章
- javascript基础修炼(3)—What's this(下)
开发者的javascript造诣取决于对[动态]和[异步]这两个词的理解水平. 这一期主要分析各种实际开发中各种复杂的this指向问题. 一. 严格模式 严格模式是ES5中添加的javascript的 ...
- JavaScript 基础(六) 数组方法 闭包
在一个对象中绑定函数,称为这个对象的方法.在JavaScript 中,对象的定义是这样的: var guagua = { name:'瓜瓜', birth:1990 }; 但是,如果我们给瓜瓜绑定一个 ...
- JavaScript基础函数的属性:记忆模式(019)
函数在Javascript里是有属性的,因为它们是一种特殊对象.事实上,就算是没有明确声明,函数在最初就已经包含了一些固有的属性,比如所有函数都length这个属性,它可以指出函数声明了多少个参数: ...
- linux基础命令之:vi模式下查找和替换
一.查找 查找命令 /pattern<Enter> :向下查找pattern匹配字符串 ?pattern<Enter>:向上查找pattern匹配字符串 使用了查找命令之后,使 ...
- javascript基础(六)对象
原文http://pij.robinqu.me/ JavaScript Objects 创建对象 对象直接量 var o = { foo : "bar" } 构造函数 var o ...
- javascript基础学习系列-原型链模式
1.demo代码如下: 2.画图如下: 3.规则: 1)每一个函数数据类型(普通函数/类)都有一个天生自带的属性:prototype(原型),并且这个属性是一个对象数据类型的值 2)并且prototy ...
- javascript基础六(事件对象)
1.事件驱动 js控制页面的行为是由事件驱动的. 什么是事件?(怎么发生的) 事件就是js侦测到用户的操作或是页面上的一些行为 事件源(发生在谁身上) ...
- Web前端-JavaScript基础教程下
Web前端-JavaScript基础教程下 <script>有6个属性: async对外部脚本有效,可以用来异步操作,下载东西,不妨碍其他操作. charset为src属性指定字符集. d ...
- JavaScript基础插曲—元素样式,正则表达式,全局模式,提取数组
JavaScript基础学习 学习js的基础很重要,可以让自己有更多的技能.我相信这个以后就会用到. Eg:点击选择框,在div中显示出选择的数量 window.onload = function() ...
随机推荐
- @getMapping与@postMapping
首先要了解一下@RequestMapping注解. @RequestMapping用于映射url到控制器类的一个特定处理程序方法.可用于方法或者类上面.也就是可以通过url找到对应的方法. @Requ ...
- springboot操作mongodb
springboot操作mongodb 采用MongoRepository操作mongodb springboot版本2.1.2.RELEASE 注意的是:在运行应用程序时,会报错OSS Algori ...
- linux-python3.8安装
环境: centos7.5 版本:python3.8 1.依赖包安装 yum -y install zlib-devel bzip2-devel openssl-devel ncurses-deve ...
- 等待通知--wait notify
1.简单理解 在jdk1.5之前用于实现简单的等待通知机制,是线程之间通信的一种最原始的方式.考虑这样一种等待通知的场景:A B线程通过一个共享的非volatile的变量flag来实现通信,每当A线程 ...
- PHP命令执行与防范
命令执行漏洞是指攻击者可以随意执行系统命令,是高危漏洞之一. 命令连接符:& && || | 如:ping www.baidu.com && ne ...
- Spring Cloud:Security OAuth2 自定义异常响应
对于客户端开发或者网站开发而言,调用接口返回有统一的响应体,可以针对性的设计界面,代码结构更加清晰,层次也更加分明. 默认异常响应 在使用 Spring Security Oauth2 登录和鉴权失败 ...
- 在 .NET Core 中结合 HttpClientFactory 使用 Polly(下篇)
译者:王亮作者:Polly 团队原文:http://t.cn/EhZ90oq声明:我翻译技术文章不是逐句翻译的,而是根据我自己的理解来表述的(包括标题).其中可能会去除一些不影响理解但本人实在不知道如 ...
- PHP获取项目所有控制器方法名称
PHP获取项目所有控制器方法名称 //获取模块下所有的控制器和方法写入到权限表 public function initperm() { $modules = array('admin'); //模块 ...
- 产品经理与程序员矛盾&相处
产品运营 - 知乎https://www.zhihu.com/topic/19551958/hot 产品经理与程序员矛盾的本质是什么? - 知乎https://www.zhihu.com/questi ...
- C# Note36: .NET unit testing framework
It’s usually good practice to have automated unit tests while developing your code. Doing so helps y ...