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 相关文章推荐
一个用js实现控制台控件的代码
Sep 04 Javascript
jquery cookie插件代码类
May 26 Javascript
Javascript实现的鼠标经过时播放声音
May 18 Javascript
JS Map 和 List 的简单实现代码
Jul 08 Javascript
javascript打印html内容功能的方法示例
Nov 28 Javascript
js点击选择文本的方法
Feb 09 Javascript
jQuery插件zTree实现删除树节点的方法示例
Mar 08 Javascript
微信小程序 仿美团分类菜单 swiper分类菜单
Apr 12 Javascript
基于Vue2的独立构建与运行时构建的差别(详解)
Dec 06 Javascript
layui table 获取分页 limit的方法
Sep 20 Javascript
JavaScript代理模式原理与用法实例详解
Mar 10 Javascript
vue+vant 上传图片需要注意的地方
Jan 03 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缓存技术详细总结
2013/08/07 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
php版微信js-sdk支付接口类用法示例
2016/10/12 PHP
laravel如何开启跨域功能示例详解
2017/08/31 PHP
查询绑定数据岛的表格中的文本并修改显示方式的js代码
2009/12/15 Javascript
当前页禁止复制粘贴截屏代码小集
2013/07/24 Javascript
jquery中html、val与text三者属性取值的联系与区别介绍
2013/12/29 Javascript
js实现延迟加载的方法
2015/06/24 Javascript
初步使用bootstrap快速创建页面
2016/03/03 Javascript
JavaScript的new date等日期函数在safari中遇到的坑
2016/10/24 Javascript
原生JS实现图片轮播切换效果
2016/12/15 Javascript
原生JS实现在线问卷调查投票特效
2017/01/03 Javascript
jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】
2017/06/26 jQuery
小程序click-scroll组件设计
2019/06/18 Javascript
layUI使用layer.open,在content打开数据表格,获取值并返回的方法
2019/09/26 Javascript
vue实现一个6个输入框的验证码输入组件功能的实例代码
2020/06/29 Javascript
vue-列表下详情的展开与折叠案例
2020/07/28 Javascript
[02:09]DOTA2辉夜杯 EHOME夺冠举杯现场
2015/12/28 DOTA
Python文本统计功能之西游记用字统计操作示例
2018/05/07 Python
详解python selenium 爬取网易云音乐歌单名
2019/03/28 Python
python网络编程之多线程同时接受和发送
2019/09/03 Python
pycharm中import呈现灰色原因的解决方法
2020/03/04 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
2020/05/23 Python
一款基于css3和jquery实现的动画显示弹出层按钮教程
2015/01/04 HTML / CSS
欧洲第一的摇滚和金属乐队服装网站:EMP
2017/10/26 全球购物
美国职棒大联盟官方网上商店:MLBShop.com
2017/11/12 全球购物
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
Elizabeth Gage官网:英国最好的珠宝设计之一
2020/09/26 全球购物
英国发展最快的在线超市之一:Click Marketplace
2021/02/15 全球购物
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
一份恶作剧的检讨书
2014/09/13 职场文书
居委会四风问题个人对照检查材料
2014/09/25 职场文书
党员公开承诺书(2016最新版)
2016/03/24 职场文书
2016年幼儿园教研活动总结
2016/04/05 职场文书
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL
浅谈Node的内存泄露问题
2022/05/06 NodeJs