JS严格模式知识点总结


Posted in Javascript onFebruary 27, 2018

所谓严格模式其实就是一个不会赋值给任何变量的字符串 “use strict”

如果在全局作用域下 给出这个提示,那整个脚本将采用严格模式。也可以只在函数中打开严格模式

1.严格模式下没有全局变量

a="test"

严格模式下会报错,非严格模式下正常

2.删除变量

var 有三种声明的情形

  • var 声明的全局变量
  • var 声明的局部变量
  • eval()中声明的全局变量

第一种和第二种情况是无法用 delete删掉的。

首先第一种情况声明的全局对象虽然是windows的属性,但这个属性的configurable=false 因此是无法删除的

第二种情况 局部变量更不行了,连依附的对象是谁都不知道,怎么删除

第三种情况eval()稍后会说到。

回归正题。也就是说非严格模式下,可以删除变量,但是会失败返回false.

严格模式下删除变量会报错。

3.对象

在下列情况下操作对象会报错

  1. 为只读属性赋值会报错
  2. 对不可配置的属性使用delete 会报错
  3. 为不可扩展的对象添加属性会报错
  4. 在使用对象字面量的时候,属性名必须唯一。比如
var person={
  name:"1",
  name:"2"
}

非严格模式下会默认取值第二个,严格模式下会报错。

4.函数

严格模式要求函数参数名称必须唯一

function(n,n){
  // todo
}

在非严格模式下,这个函数声明不会报错,通过参数名只能访问到第二个参数,第一个参数得通过arguments去访问。

arguments在两种模式下也有所不同

在非严格模式下,修改命名参数的值会反映到arguments对象中,在严格模式下两个值是独立的。

淘汰了 arguments.callee(引用函数本身),arguments.caller(引用调用函数)。

严格模式下函数名不能使用js保留字

**严格模式下只能在脚本的顶级和在函数内部声明函数,在if语句中声明函数会导致语法错误。**

if(true){
  function(){
   // 严格模式下报错
}
}

5.this

在非严格模式下使用函数的apply(),call(),传入null 或者undefined值会被转换为全局对象。在严格模式下,函数的this始终是指定的值,无论指定的是什么值。

var a="1";
function test(){
 console.log(this.a)
}
test.call(null) 在非严格模式下会输出1,严格模式下this就指代的就是null,null没有a属性,就会报错。

 

Javascript 相关文章推荐
jQuery实战之品牌展示列表效果
Apr 10 Javascript
js读取注册表的键值示例
Sep 25 Javascript
JQuery实现绚丽的横向下拉菜单
Dec 19 Javascript
AngularJS初始化过程分析(引导程序)
Dec 06 Javascript
jQuery插件实现大图全屏图片相册
Mar 14 Javascript
jQuery EasyUI基础教程之EasyUI常用组件(推荐)
Jul 15 Javascript
Vue.js第二天学习笔记(vue-router)
Dec 01 Javascript
JS身份证信息验证正则表达式
Jun 12 Javascript
详解Vue学习笔记入门篇之组件的内容分发(slot)
Jul 17 Javascript
解析Vue.js中的组件
Feb 02 Javascript
js中null与空字符串""的区别讲解
Jan 17 Javascript
vue引入Excel表格插件的方法
Apr 28 Vue.js
总结js函数相关知识点
Feb 27 #Javascript
详解jQuery中的isPlainObject()使用方法
Feb 27 #jQuery
详解Vue Elememt-UI构建管理后台
Feb 27 #Javascript
详解react-native WebView 返回处理(非回调方法可解决)
Feb 27 #Javascript
Vue2.5通过json文件读取数据的方法
Feb 27 #Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
Feb 27 #Javascript
jQuery幻灯片插件owlcarousel参数说明中文文档
Feb 27 #jQuery
You might like
PHP实现批量修改文件后缀名的方法
2015/07/30 PHP
PhpStorm本地断点调试的方法步骤
2018/05/21 PHP
Laravel 微信小程序后端搭建步骤详解
2019/11/26 PHP
用 JSON 处理缓存
2007/04/27 Javascript
js动态修改input输入框的type属性(实现方法解析)
2013/11/13 Javascript
javaScript 页面自动加载事件详解
2014/02/10 Javascript
js读取配置文件自写
2014/02/11 Javascript
jQuery插件Zclip实现完美兼容个浏览器点击复制内容到剪贴板
2015/04/30 Javascript
学习Javascript面向对象编程之封装
2016/02/23 Javascript
使用getBoundingClientRect方法实现简洁的sticky组件的方法
2016/03/22 Javascript
浅谈Koa2框架利用CORS完成跨域ajax请求
2018/03/06 Javascript
js捆绑TypeScript声明文件的方法教程
2018/04/13 Javascript
AngularJS实现的自定义过滤器简单示例
2019/02/02 Javascript
Javascript操作select控件代码实例
2020/02/14 Javascript
jQuery插件实现图片轮播效果
2020/10/19 jQuery
Python类的用法实例浅析
2015/05/27 Python
Selenium 模拟浏览器动态加载页面的实现方法
2018/05/16 Python
python3实现SMTP发送邮件详细教程
2018/06/19 Python
Django 重写用户模型的实现
2019/07/29 Python
Python request操作步骤及代码实例
2020/04/13 Python
解决tensorflow 释放图,删除变量问题
2020/06/23 Python
通过实例了解python__slots__使用方法
2020/09/14 Python
html5教程调用绘图api画简单的圆形代码分享
2013/12/04 HTML / CSS
领先的荷兰线上超市:荷兰之家Holland at Home(支持中文)
2021/01/21 全球购物
璀璨的珍珠、密钉和个性化珠宝:Lily & Roo
2021/01/21 全球购物
销售人员中英文自荐信
2013/09/22 职场文书
给儿子的表扬信
2014/01/15 职场文书
企业法人代表任命书
2014/06/06 职场文书
元旦联欢会策划方案
2014/06/11 职场文书
课前一分钟演讲稿
2014/08/26 职场文书
个人党性分析总结
2015/03/05 职场文书
公司员工宿舍管理制度
2015/08/03 职场文书
少先队大队委竞选口号
2015/12/25 职场文书
Linux中Nginx的防盗链和优化的实现代码
2021/06/20 Servers
Redis实现短信验证码登录的示例代码
2022/06/14 Redis
TS 类型收窄教程示例详解
2022/09/23 Javascript