首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Js严格模式

Js严格模式 JavaScript严格模式strict mode,即在严格的条件下运行。...严格模式消除了Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;消除代码运行的一些不安全之处,保证代码运行的安全;提高了引擎的效率,增加运行速度;为未来新的Js版本做好铺垫。...不允许对只读属性操作 // 非严格模式 // 操作静默失败,即不报错也没有任何效果 // 给不可写属性赋值 var obj = {}; Object.defineProperty(obj, "x",...(arguments[0], arguments[1]); // 1 2 } s(1, 2); this的限制 在严格模式下通过this传递给一个函数的值不会被强制转换为一个对象。...如果fun在严格模式下,那么fun.caller和fun.arguments都是不可删除的属性而且在存值、取值时都会报错。

2.3K30

前端测试题:(解析)代码中使用use strict模式,以下JS写法正确的是?

顾名思义,这种模式使得Javascript在更严格的条件下运行。...; - 为未来新版本的Javascript做好铺垫。..."严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。...另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。...不允许变量重名: 不允许使用八进制: 不允许使用转义字符: 不允许对只读属性赋值: 不允许对一个使用getter方法读取的属性进行赋值 不允许删除一个不允许删除的属性: 变量名不能使用 "eval" 字符串

78010
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    【JS ES6】use strict 严格模式

    什么是严格模式 严格模式是在 ECMAScript5(ES5)中引入的,在严格模式下,JavaScript 对语法的要求会更加严格,一些在正常模式下能够运行的代码,在严格模式下将不能运行。...1、不允许使用未声明的变量 普通模式下,如果一个变量还没有声明,就直接拿来赋值,JavaScript 解释器会自动为您创建这个变量。...with 语句 在严格模式下,不允许使用 with 语句。...在严格模式下,不允许为只读或不存在的属性赋值,否则会造成语法错误,而在普通模式下,虽然不会成功,但并不会报错。...在严格模式下,不允许使用八进制数(以零为前缀的数字,例如 010、0377),而在普通模式下则可以。

    1.8K40

    Javascript 严格模式 “use strict”

    另一方面,同样的代码,在”严格模式”中,可能会有不一样的运行结果;一些在”正常模式”下可以运行的语句,在”严格模式”下将不能运行。...this;   }    // 返回true,因为严格模式下,this的值为undefined,所以”!this”为true。...,对一个对象的只读属性进行赋值,不会报错,只会默默地失败。...(1)对象不能有重名的属性 正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。   ...为了与新版本接轨,严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。

    96410

    JavaScript 严格模式

    return "正常模式函数"; } 严格模式有哪些不同 全局变量显式声明 在正常模式下,如果一个变量未声明就直接赋值,相当于创建一个全局变量。...不可变量赋值 例如: NaN 是一个不可写的全局变量. 在正常模式下, 给 NaN 赋值不会产生任何作用; 开发者也不会受到任何错误反馈. 但在严格模式下, 给 NaN 赋值会抛出一个异常。...给只读属性(getter-only)赋值赋值, 给不可扩展对象(non-extensible object)的新属性赋值) 都会抛出异常: "use strict"; // 给不可写属性赋值 var...这种自动转化为对象的过程不仅是一种性能上的损耗,同时在浏览器中暴露出全局对象也会成为安全隐患。...函数声明 严格模式只允许在全局作用域或函数作用域的顶层声明函数。也就是说,不允许在非函数的代码块内声明函数。

    82930

    再有人问你JavaScript中的严格模式是什么?把这篇文章丢给他

    )模式“;支持严格模式的浏览器在检测到代码中有严格模式时,会以更加严格的方式对代码进行检测和执行;那么如何开启严格模式呢?...禁止意外创建全局变量禁止意外创建变量,在严格模式中未定义就赋值的写法是不被允许的。// 1. 禁止意外创建全局变量。...message = "Hello World"// 在严格模式下这种未定义就赋值的写法是不被允许的console.log(message)function foo () { age = 20 //...在严格模式下这种未定义就赋值的写法是不被允许的,而在非严格模式下会创建一个age全局变量}foo()console.log(age)2.不允许函数有相同的参数名称// 不允许函数有相同的参数名称function...6.在严格模式下的this的指向"use strict"// 在严格模式下, 自执行函数(默认绑定)会指向undefined// 之前编写的代码中, 自执行函数我们是没有使用过this直接去引用windowfunction

    23900

    重学JS-1.1-知识点:严格模式“use strict”

    "; // 这一行代码就会抛出 ReferenceError 静默失败的赋值操作也抛出异常 "use strict"; // 给不可写属性赋值 var obj1 = {}; Object.defineProperty...(obj1, "x", { value: 42, writable: false }); obj1.x = 9; // 抛出TypeError错误 // 给只读属性赋值 var obj2 = { get...x; } eval不再为上层范围引入新变量 在 eval 执行的严格模式代码下,变量的行为与严格模式下非 eval 执行的代码中的变量相同。...var x = 17; var evalX = eval("'use strict'; var x = 42; x"); //严格模式外部x不会被赋值为42,非严格模式会 console.assert(...arguments[0]没有映射关系,还是17,非严格模式下会被改成42 不允许使用arguments.callee "use strict"; var f = function() { return

    92620

    【TypeScript 演化史 — 第二章】基于控制流的类型分析 和 只读属性

    严格的 Null 检查 当与可空类型一起使用时,基于控制流的类型分析尤其有用,可空类型使用包括 null 或undefined 在联合类型中的表示。...在严格的 null 检查模式下,undefined 的类型会自动添加到可选属性的联合类型中,因此我们不必显式将其写出。 明确赋值分析 基于控制流的另一个新特性是明确赋值分析。...在严格的 null 检查模式下,对类型不允许为 undefined 的局部变量有明确赋值的分析: let name: string; // Error: 在赋值前使用了变量 “name” console.log...其思想是确保每个不可空的局部变量在使用之前都已正确初始化。 只读属性 在 TypeScript 2.0 中,readonly 修饰符被添加到语言中。...使用 readonly 标记的属性只能在初始化期间或从同一个类的构造函数中分配,其他情况一律不允许。 来看一个例子。

    2K10

    ES6入门之Module

    这种加载就是 编译时加载或者静态加载 1.1 ES6模块的好处 不再需要UMD模块格式。 将来浏览器的新API就能用模块格式提供,不再必须做成全局变量或 navigator 对象的属性。...不在需要命名空间 2、严格模式 ES6的模块自动采用严格模式,不管你有没有在模块头部加上 「use strict」 2.1 严格模式的限制 变量必须声明再使用 函数的参数不能有同名属性,否则报错 不能使用...with语句 不能对只读属性赋值,否则报错 不能删除不可删除的属性,否则报错 不能删除变量 delete prop,会报错,只能删除属性delete global[prop] eval不会在它的外层作用域引入变量...通常情况下,export输出的是变量本身的名字,如果想重命名的话,可以通过 as 关键字。...也就是说,不允许在加载模块的脚本里改写接口。 5、模块的整体加载 除了指定加载某个输出值,还可以使用整体加载,即用 星号 (*)指定对象,所有输出值都加载在这个对象上面。

    34010

    JavaScript 对象可以做到的三件事

    在本文中,我们将了解如何使用它们,包括访问内部属性、操作属性描述符和继承只读属性。 1. 访问内部属性 JavaScript 对象无法以常规方式访问的内部属性。...,如: foo.a = 2; 如果关闭了严格模式,浏览器将忽略,否则将抛出一个错误,因为我们将 writable 设置为 false, 表示该属性不可写。...'b', { get() { return 1; } }) 当我们这样写的时候: foo.b = 2; 因为b属性是getter属性,所以当使用严格模式时,我们会得到一个错误:Getter...3.无法分配继承的只读属性 继承的只读属性不能再赋值。这是有道理的,因为我们这样设置它,它是继承的,所以它应该传播到继承属性的对象。...如果我们这样写: foo.a = 2; 在严格模式下,我们会收到错误消息。 总结 我们可以用 JavaScript 对象做很多我们可能不知道的事情。

    71940

    严格模式 – JavaScript

    不支持严格模式的浏览器与支持严格模式的浏览器行为上也不一样, 所以不要在未经严格模式特性测试情况下使用严格模式。严格模式可以与非严格模式共存,所以脚本可以逐渐的选择性加入严格模式。...例如, NaN 是一个不可写的全局变量. 在正常模式下, 给 NaN 赋值不会产生任何作用; 开发者也不会受到任何错误反馈. 但在严格模式下, 给 NaN 赋值会抛出一个异常....任何在正常模式下引起静默失败的赋值操作 (给不可写属性赋值, 给只读属性(getter-only)赋值赋值, 给不可扩展对象(non-extensible object)的新属性赋值) 都会抛出异常:...}); obj1.x = 9; // 抛出TypeError错误 // 给只读属性赋值 var obj2 = { get x() { return 17; } }; obj2.x = 5; //...如果你只在不支持严格模式的浏览器中测试,那么在支持的浏览器中就很有可能出问题,反之亦然。

    1K30

    JS与ES6高级编程学习笔记(一)——JavaScript核心组成

    2.4、严格模式 ECMAScript5(简称ES5)之前没有严格模式,过于宽泛的语法要求使得JavaScript代码可读性差,在ES5中增加了严格模式,这种模式使得JavaScript在更严格的条件下运行...图1-11 this不再指向全局对象示例输出结果 (5)、越权操作直接异常,不再静默失败 在常规模式下,通过var声明的变量是不可删除的,试图删除会静默失败,在严格模式下会直接抛出异常;另外试图删除对象中不可删除的属性也会显式报错...(6)、不允许对象属性重名 默认情况在对象中定义重复的属性,后定义的值会覆盖先定义的,严格模式规定,对象中不允许重复的属性,如图1-12所示。...(7)、不允许参数重名 非严格模式下函数有多个重名的参数,可以用arguments[i]读取,严格模式下不允许参数重名。...2、如果用户在电脑上打开该页面时返回false。 提示:navigator.userAgent属性是一个只读的字符串,声明了浏览器用于 HTTP 请求的用户代理头的值。

    2.1K20

    ESCMScript(2)Module语法

    大家好,又见面了,我是你们的朋友全栈君。 严格模式 ES6 的模块自动采用严格模式,不管你有没有在模块头部加上"use strict";。...严格模式的限制如下 变量必须声明后再使用 函数的参数不能有同名属性,否则报错 不能使用with语句 不能对只读属性赋值,否则报错 不能使用前缀 0 表示八进制数,否则报错 不能删除不可删除的属性,否则报错...export重命名 通常情况下,export输出的变量就是本来的名字,但是可以使用as关键字重命名。.../profile.js'; 变量只读 import命令输入的变量都是只读的,因为它的本质是输入接口。也就是说,不允许在加载模块的脚本里面,改写接口。 import {a} from '..../xxx.js' a = {}; // Syntax Error : 'a' is read-only; 上面代码中,脚本加载了变量a,对其重新赋值就会报错,因为a是一个只读的接口。

    26510

    ESMAScript 6.0高级

    不允许只声明不赋值 //const d; // Missing initializer in const declaration         1.2解构赋值 ES6允许按照一定模式..., 如果没有,在浏览器环境下this是window;在node.js环境下为指定环境(例如:vue) 创建 demo03_2.js 文件 var name="外部"; var user = {.../demo07_1"); console.info( add(1,2) );         2.2ES6 module 隐式要求 ES6的模块自动采用严格模式,不管你有没有在模块头部加上"use strict...严格模式主要有以下限制。...变量必须声明后再使用 函数的参数不能有同名属性,否则报错 不能使用with语句 不能对只读属性赋值,否则报错 不能使用前缀0表示八进制数,否则报错 不能删除不可删除的属性,否则报错 不能删除变量

    74620

    javascript中的Strict模式

    比如可以使用未定义的变量,可以给对象中的任意属性赋值并不会抛出异常等等。 在ES5中,引入了strict模式,我们可以称之为严格模式。相应的sloppy mode就可以被称为非严格模式。...严格模式并不是非严格模式的一个子集,相反的严格模式在语义上和非严格模式都发生了一定的变化,所以我们在使用过程中,一定要经过严格的测试。以保证在严格模式下程序的执行和非严格模式下的执行效果一致。...syntax error~~ 简化arguments 在js中,arguments代表的是参数数组,首先在Strict模式下,arguments是不能作为变量名被赋值的: 'use strict'; arguments...另外,在普通模式下,我们可以通过fun.caller或者fun.arguments来获取到函数的调用者和参数,这有可能会访问到一些private属性或者不安全的变量,从而造成安全问题。...但是如果我们在浏览器端使用的话,还是需要注意浏览器的兼容性,并做好严格的测试。

    86830
    领券