JS严格模式知识点总结
作者:laozhang 发布时间:2024-05-13 10:06:42
所谓严格模式其实就是一个不会赋值给任何变量的字符串 “use strict”
如果在全局作用域下 给出这个提示,那整个脚本将采用严格模式。也可以只在函数中打开严格模式
1.严格模式下没有全局变量
a="test"
严格模式下会报错,非严格模式下正常
2.删除变量
var 有三种声明的情形
var 声明的全局变量
var 声明的局部变量
eval()中声明的全局变量
第一种和第二种情况是无法用 delete删掉的。
首先第一种情况声明的全局对象虽然是windows的属性,但这个属性的configurable=false 因此是无法删除的
第二种情况 局部变量更不行了,连依附的对象是谁都不知道,怎么删除
第三种情况eval()稍后会说到。
回归正题。也就是说非严格模式下,可以删除变量,但是会失败返回false.
严格模式下删除变量会报错。
3.对象
在下列情况下操作对象会报错
为只读属性赋值会报错
对不可配置的属性使用delete 会报错
为不可扩展的对象添加属性会报错
在使用对象字面量的时候,属性名必须唯一。比如
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属性,就会报错。


猜你喜欢
- MS SQL基本语法及实例操作 一:建表并初始化 ============================ create database
- 本文介绍的是python中pandas.DataFrame对行与列求和及添加新行与列的相关资料,下面话不多说,来看看详细的介绍吧。方法如下:
- python程序结构python“一切皆对象”,这是接触python听到最多的总结了。在python中最基层的单位应该就是对象了,对象需要靠
- 当需要实现html页面部分模块截图并具有保存图片功能时,前台直接生成截图并下载会方便的多。多的不说,直接看代码首先我们需要引入2个js文件:
- 打开链接是在新窗口还是原窗口是一个最基础的交互方式。但是很多项目进行中,我们的原型设计并没有仔细考虑链接打开方式。而为了满足运营的需要,选择
- 这里的Go(SDK)、GoLand的安装就不多说了,网上自行下载,我们着重讲项目配置,import pkg时能够完美运行一、Go版本以及Go
- 机器学习之随机森林,供大家参考,具体内容如下1、Bootstraping(自助法)  
- 如下所示:file = open('./abc.csv')csv.reader(file, delimiter=',
- Google以其简洁的搜索框引领着互联网,搜索系统似乎成了每个网站必备品,甚至于是那些本身几乎是由静态页面组成的企业网站都要来个搜索功能,这
- 一、问题描述当用JS调用form的方法submit直接提交form的时候,submit事件不响应。为什么?知道的请回复。类比一下,我用inp
- 对range()逆序的解释在 Python3.6 中,range() 函数返回一个可迭代的范围对象,范围类型表示不可变的数字序列,一般用在
- 前言:多态的实现必须满足两个前提条件1.继承:多态一定是发生在子类和父类之间2.重写:多态子类重写了父类的方法记住这两点再结合代码示例有助于
- 当使用Tensorflow训练大量深层的神经网络时,我们希望去跟踪神经网络的整个训练过程中的信息,比如迭代的过程中每一层参数是如何变化与分布
- 之前已经写过一篇关于Django外键的文章,但是当时并没有介绍如何根据外键对数据的操作,也就是如何通过主表查询子表或者通过子表查询主表的信息
- 本文记录了MySQL 5.7的物理和逻辑架构,还有其组件。在这个帖子中,我会尝试用图去说明SQL语句的执行流程和数据处理流程。MySQL的架
- 由于网络带宽以及某些WAP服务器DECK传输的限制,所以DECK越小越好,最好不要超过1.2K。如果你的需求很复杂,最好分成几个DECK来完
- 下面的demo是根据需求写的简单测试脚本#!/usr/bin/env python# coding: utf-8# 第一个列表为依赖组件和版
- 今天在写一个算法的过程中,得到了一个类似下面的字典:{'user1':0.456,'user2':0.999
- 在Python中可以通过几种方法调用C++的函数,这里介绍使用ctypes的方法。ctypes是Python自带的一个模块,能够直接载入C+
- 哪里出问题了python 中,使用 global 会将全局变量设为本函数可用。同时,在函数内部访问变量会先本地再全局。在嵌套函数中,使用 g