JavaScript学习笔记【DAY12(2020.9.1)周二】
ES5(2009)
严格模式
因为JS是一门很随心 很随意的语言 而且因为设计之初遗留了很多不好的地方 这就给开发人员制造了很多困扰 而且也有开发人员给开发人员制造困扰
为了解决这些问题 ES5 中 增加了一个 "严格模式" 严格要求开发人员的代码书写
严格模式对正常的 JavaScript 语义做了一些更改:
1.消除了 Javascript 语法的一些不合理、不严谨之处,减少了一些怪异行为。
2.消除代码运行的一些不安全之处,保证代码运行的安全。
3.提高编译器效率,增加运行速度。
4.禁用了在 ECMAScript 的未来版本中可能会定义的一些语法,为未来新版本的 Javascript 做好铺垫。比如一些保留字如:class,enum,export, extends, import, super 不能做变量名
开启严格模式:
情况一 :为脚本开启严格模式(在当前作用域的第一行 使用字符串 use strict;)
情况二: 为函数开启严格模式
1、声明变量必须使用var
num = 10;
console.log(num);
// 开启严格模式之后 报错: num is not defined
2、函数的形参不可以重名
function demo(a, a, b, c, d) {
console.log(a, b, c, d);
}
demo(1, 2, 3, 4, 5);
// 开启严格模式之后 报错: Uncaught SyntaxError: Duplicate
parameter name not allowed in this context
3、不可以使用八进制
var num = 044;
console.log(num); // 36
// 开启严格模式之后 报错: Uncaught SyntaxError: Octal literals
are not allowed in strict mode.
4、不可以使用保留字作为变量名
var implements = 123;
console.log(implements);
// 开启严格模式之后 Uncaught SyntaxError: Unexpected strict mode reserved word
5、eval 是一个函数,可以将字符串当代码执行
eval("var a = 10;");
console.log(a);
// 开启严格模式之后 eval执行的代码 不会影响到当前的作用域了 会独立给eval强制开辟一个作用域
// Uncaught ReferenceError: a is not defined
6、函数的形参与arguments是分开的,
7、不能删除已经声明好的变量
8、严格模式下不能用with语句
9、函数不能有重名的参数。
10、严格模式下this指向问题
① 以前在全局作用域函数中的 this 指向 window 对象。
② 严格模式下全局作用域中函数中的 this 是 undefined。
③ 以前构造函数时不加 new也可以 调用,当普通函数,this 指向全局对象
④ 严格模式下,如果构造函数不加new调用, this指向的是undefined如果给他赋值则会报错
⑤ new 实例化的构造函数指向创建的对象实例。
⑥ 定时器 this 还是指向 window 。
⑦ 事件、对象还是指向调用者
JSON:(JavaScript Object Notation(符号、注释))
JSON是一种数据格式。
JSON格式要求:
1、每一个属性名必须由双引号包裹,每一个字符串必须由双引号包裹,不能有注释;
2、最后一个逗号必须省略,ES5中新增了一个JSON对象。
作用:用于将对象和数组转为字符串形式,也用于将字符串形式的对象和数组转为真正的对象。
stringify(object | arr):用于将对象转为字符串
参数是对象或者数组
返回值 JSON字符串
parse(JSONString):用于将JSON格式的字符串转为对象
参数是JSON字符串
返回值 是对象或者数组
parse方法接受的参数如果不是合格的JSON字符串,则会报错
注: 字符串形式也叫做JSON字符串