2019-07-15 一周热词第二期
一周热词
1. 伪类,伪元素
==================================== 1.1伪类 pseudo class
1
2
3
4
5
6
7
8
9
添加在选择器后面,以:开始,用于对特别指出的元素应用样式
比方说,我们经常用的 :hover :first-child :last-child
1.2 伪元素 pseudo element
添加在选择器后面,以::开始,用于在特定的元素后面添加一个元素
比方说,我们经常用的 ::before ::after
2. Object.freeze
====================================
3. js严格模式与正常模式的区别
==================================== 之前在写angularjs的时候,经常在页面的顶部,显示调用严格模式 use strict;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
严格模式是在ECMAscript5中添加的,顾名思义,就是是的JavaScript再更严格的条件下运行
设立严格模式主要有以下几个目的
①消除JavaScript语法的一些不合理,不严谨之处,减少一些怪异行为;
②消除代码运行的一些不安全之处,保证代码运行的安全
③提高编译器效率,增加运行速度
④为未来新版本的JavaScript做好铺垫
现代浏览器都已经支持严格模式,框架中也支持。
PS:老版本的浏览器会把严格模式的调用当做一行字符串,忽略。
调用严格模式只需要协商“use strict”;即可
严格模式有两种调用方法,作用范围不同
①针对整个脚本文件
在脚本第一行写上“use strict”;,必须写在第一行,否则无效,将以正常模式调用
``<script>
"use strict";
// doing something
function func() {
}
</script>``
在现代开发过程中,线上部署的时候,我们通常将会把所有的js文件合并成一个js,这种写法可能不利于合并,我们可以把整个脚本文件放在一个立即执行的匿名函数中
``()(function() {
"use strict";
// doing something
})()``
ps:之前在angularjs中,采用的就是这种写法
②针对单个函数
在函数体的第一行写上“use strict”;
``function func() {
use strict”;
// doing something
}``
在具体的代码过程中,究竟有哪些影响呢?
① 变量必须先显示声明再使用,否则报错
②静态绑定
JavaScript有一个特点就是允许“动态绑定”,即某些属性和方法属于哪一个对象是在运行时确定的,在严格模式下,再编译阶段就确定,这样做有利于编译效率的提高,代码易读。
具体如下
1. 禁止使用with语句
2. 创设eval作用域
③加强了一些安全措施
1. 禁止this关键字指向全局对象
2. 禁止在函数内部遍历调用栈
④禁止删除变量,只有configurable设置为true的对象属性,才能被删除
``"use strict";
var x;
delete x; // 语法错误
var o = Object.create(null, {'x': {
value: 1,
configurable: true
}});
delete o.x; // 删除成功``
⑤显示报错
1. 正常模式下,对一个对象的只读属性赋值,不会报错,会默默地失败。严格模式下,将报错
2. 严格模式下,对getter方法赋值,会报错
3. 严格模式下,对禁止扩展的对象添加新属性,会报错
"use strict";
var o = {};
Object.preventExtensions(o);
o.v = 1; // 报错
4.严格模式下,删除一个不可删除的属性,会报错
"use strict";
delete Object.prototype; // 报错
⑥重名错误,函数,变量名,对象属性都不能有重复的,否则会报错
⑦禁止八进制
``"use strict";
var n = 0100; // 语法错误``
⑧arguments对象的显示
1. 不允许对arguments赋值
``"use strict";
arguments++; // 语法错误``
2. arguments不再追踪参数的变化
3. 禁止使用arguments.callee
``"use strict";
var f = function() { return arguments.callee; };
f(); // 报错``
⑨函数必须生命再顶层,不允许在非函数的代码块内生命函数
``"use strict";
if () {
function f() { } // 语法错误
}
for () {
function f2() { } // 语法错误
}``
⑩添加了一些保留字,
implements, interface, let, package, private, protected, public, static, yield。
参考文章
1. http://www.ruanyifeng.com/blog/2013/01/javascript_strict_mode.html
2. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Strict_mode
4. 逻辑运算符 && 和 || 不一定返回布尔值
====================================
相关链接:
This post is licensed under CC BY 4.0 by the author.