JS严格模式(use strict)详解
url = 'http://c.biancheng网站站点" rel="nofollow" /> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<script>
"use strict";
x = 'http://c.binacheng网站站点" rel="nofollow" /> <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>JavaScript</title>
</head>
<body>
<script>
x = 'http://c.binacheng网站站点" rel="nofollow" /> 注意:"use strict"; 或 'use strict'; 指令只有在整个脚本行或者函数行时才能被识别,除了 IE9 以及更低的版本外,所有的浏览器都支持该指令。
严格模式中的变化
相对于普通模式来说,严格模式对 JavaScript 的语法都做了一些改变。
1、不允许使用未声明的变量
普通模式下,如果一个变量还没有声明,就直接拿来赋值,JavaScript 解释器会自动为您创建这个变量。而在严格模式下,则不允许这么做,所有变量在使用前必须显式的声明,否则将会抛出一个 ReferenceError 错误。
"use strict";
v = 1; // 此处报错:Uncaught ReferenceError: v is not defined
for(i = 0; i < 2; i++) { // 此处报错:Uncaught ReferenceError: i is not defined
}
2、不允许删除变量或函数
在严格模式下,如果您尝试删除一个变量或函数,则会抛出语法错误。而在普通模式下,虽然不会成功,但并不报错。
"use strict";
var person = {name: "Peter", age: 28};
delete person; // 此处报错:Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
function sum(a, b) {
return a + b;
}
delete sum; // 此处报错:Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
3、函数中不允许有同名的参数
在严格模式下,如果函数中有两个或多个同名参数,则会抛出语法错误,而在普通模式下则不会。
"use strict";
function square(a, a) { // 此处报错:Uncaught SyntaxError: Duplicate parameter name not allowed in this context
return a * a;
}
4、eval 语句的作用域是独立的
普通模式下,eval 语句的作用域取决于它所在的位置,而在严格模式下,eval 语句本身就是一个局部作用域,通过 eval 语句生成的变量只能在 eval 语句内使用。
"use strict";
eval("var x = 5; console.log(x);");
console.log(x); // 此处报错:Uncaught ReferenceError: x is not defined
5、不允许使用 with 语句
在严格模式下,不允许使用 with 语句。
"use strict";
var radius1 = 5;
var area1 = Math.PI * radius1 * radius1;
var radius2 = 5;
with(Math) { // 此处报错:Uncaught SyntaxError: Strict mode code may not include a with statement
var area2 = PI * radius2 * radius2;
}
6、不允许写入只读属性
在严格模式下,不允许为只读或不存在的属性赋值,否则会造成语法错误,而在普通模式下,虽然不会成功,但并不会报错。
"use strict";
var person = {name: "Peter", age: 28};
Object.defineProperty(person, "gender", {value: "male", writable: false});
person.gender = "female"; // 此处报错:Uncaught TypeError: Cannot assign to read only property 'gender' of object '#<Object>'
7、不允许使用八进制数
在严格模式下,不允许使用八进制数(以零为前缀的数字,例如 010、0377),而在普通模式下则可以。
"use strict";
var x = 010; // 此处报错:Uncaught SyntaxError: Octal literals are not allowed in strict mode.
console.log(parseInt(x));
8、不能在 if 语句中声明函数
在严格模式下,不能在 if 语句中声明函数,调用在 if 语句中定义的函数时,会提示函数未定义。
"use strict";
//如果在if语句中声明函数,则会产生语法错误
if (true) {
function demo() { // 此处报错:Uncaught ReferenceError: demo is not defined
console.log("http://c.biancheng网站站点" rel="nofollow" /> "use strict";
var name = "http://c.biancheng网站站点" rel="nofollow" /> - 随机文章
- 澳门 马尔代夫 亚航(亚洲旅游热门目的地:澳门和马尔代夫成为Asia航空新航点)
- 机票 上海 马尔代夫(航程查询:上海到马尔代夫往返机票预订)
- 嘉鱼马尔代夫简介(探索嘉鱼马尔代夫:小岛国的天堂风景)
- 泰姬 马尔代夫(「泰姬岛」 打造充满奢华的马尔代夫旅行新体验)
- 平潭马尔代夫岛屿(福建平潭开发区将建马尔代夫度假岛屿)
- 国安马尔代夫进展(国安马尔代夫取得进展,稳固海上安全)
- 斑马旅行马尔代夫(斑马旅行探索马尔代夫的热带极乐世界)
- 河源马尔代夫景点(探索河源马尔代夫,畅游美丽海底世界)
- 江西马尔代夫萍乡(萍乡市建起江南第一座透明玻璃观景台)
- 罗马庄园马尔代夫(马尔代夫的罗马庄园:唯美的度假天堂)
- 烟台小型马尔代夫(烟台推出小型海上世界,媲美马尔代夫)
- 移动套餐马尔代夫(马尔代夫专属移动套餐,畅享海岛通讯)
- 机票直播马尔代夫(直播马尔代夫机票特惠,立享大优惠!)
- 玉林马尔代夫草莓(玉林草莓出口马尔代夫,惊艳当地市场)
- 杨幂 马尔代夫(杨幂游马尔代夫:放松身心享受浪漫假期)
- 媲美 马尔代夫(与马尔代夫媲美的度假胜地,全新推荐)
- 粉色马尔代夫图片(美丽粉色马尔代夫:梦幻般的度假胜地)
- 病毒营销马尔代夫(马尔代夫旅游行业变革:病毒营销现身)
- 飞马尔代夫头等舱(飞马尔代夫头等舱体验,尊享私密服务)
- 直飞 马尔代夫(直飞马尔代夫机票大幅降价,优惠来袭!)
- 重庆马尔代夫定位(重庆旅行社推出马尔代夫特色旅游产品)
- 马尔代夫军队简介(马尔代夫军队:构建稳定与繁荣的保障)
- 马尔代夫军队编制(马尔代夫军队宣布完成新一轮编制改革)
- 马尔代夫各月气温(马尔代夫全年温暖舒适,稍有季节差异)
- 马尔代夫住宿指南(马尔代夫度假酒店推荐:完美住宿指南)
- 马尔代夫坐姿图片(美丽马尔代夫:揭秘当地人的正式坐姿)
- 马尔代夫和塞舌尔(马尔代夫和塞舌尔:印度洋美丽的双璧)
- 娇丽 马尔代夫(探索纯净无暇的马尔代夫奇迹之旅)
- 马尔代夫广州周边(广州周边旅游热门选择:马尔代夫之旅)
- 马尔代夫厨师劳务(马尔代夫食品业:厨师劳务成关键需求)
