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 相关文章推荐
Javasipt:操作radio标签详解
Dec 30 Javascript
兼容主流浏览器的iframe自适应高度js脚本
Jan 10 Javascript
使用javascript实现Iframe自适应高度
Dec 24 Javascript
jQuery中animate()方法用法实例
Dec 24 Javascript
js实现从数组里随机获取元素
Jan 12 Javascript
jQuery动态修改超链接地址的方法
Feb 13 Javascript
微信小程序 图片等比例缩放(图片自适应屏幕)
Nov 16 Javascript
简单理解js的prototype属性及使用
Dec 07 Javascript
js字符串与Unicode编码互相转换
May 17 Javascript
Vue.js简易安装和快速入门(第二课)
Oct 17 Javascript
VUEX-action可以修改state吗
Nov 19 Javascript
JavaScript实现复选框全选功能
Apr 11 Javascript
总结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 setcookie设置Cookie用法(及设置无效的问题)
2011/07/13 PHP
PHP rawurlencode与urlencode函数的深入分析
2013/06/08 PHP
PHP实现根据时间戳获取周几的方法
2016/02/26 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
CSS(js)限制页面显示的文本字符长度
2012/12/27 Javascript
JS中令人发指的valueOf方法介绍
2013/02/22 Javascript
Ext修改GridPanel数据和字体颜色、css属性等
2014/06/13 Javascript
jQuery 仿百度输入标签插件附效果图
2014/07/04 Javascript
详细解读AngularJS中的表单验证编程
2015/06/19 Javascript
探究Javascript模板引擎mustache.js使用方法
2016/01/26 Javascript
jquery之别踩白块游戏的简单实现
2016/07/25 Javascript
使用nodejs中httpProxy代理时候出现404异常的解决方法
2016/08/15 NodeJs
怎样判断jQuery当前元素是隐藏还是显示
2016/11/23 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
js放到head中失效的原因与解决方法
2017/03/07 Javascript
基于vue-cli vue-router搭建底部导航栏移动前端项目
2018/02/28 Javascript
Net微信网页开发 使用微信JS-SDK获取当前地理位置过程详解
2019/08/26 Javascript
Vue项目中使用better-scroll实现菜单映射功能方法
2019/09/11 Javascript
微信小程序 下拉刷新及上拉加载原理解析
2019/11/06 Javascript
[00:10]DOTA2全国高校联赛 以DOTA2会友
2018/05/30 DOTA
在cmder下安装ipython以及环境的搭建
2018/10/19 Python
python 划分数据集为训练集和测试集的方法
2018/12/11 Python
详解python 3.6 安装json 模块(simplejson)
2019/04/02 Python
利用Python脚本实现自动刷网课
2020/02/03 Python
使用Keras预训练模型ResNet50进行图像分类方式
2020/05/23 Python
Python ConfigParser模块的使用示例
2020/10/12 Python
全球最大的网上自行车商店:Chain Reaction Cycles
2016/12/02 全球购物
Hotter Shoes英国官网:英伦风格,舒适的鞋子
2017/12/28 全球购物
自荐信封面
2013/12/04 职场文书
测试工程师程序员求职信范文
2014/02/20 职场文书
老师对学生的寄语
2014/04/09 职场文书
孝敬父母的演讲稿
2014/05/14 职场文书
模具专业自荐信
2014/05/29 职场文书
2014年采购工作总结
2014/11/20 职场文书
详解python的内存分配机制
2021/05/10 Python