标准相等操作符(==
and !=
) 当两个操作数类型不相等时,会在比较前尝试将其转换为相同类型。
严格相等操作符 (===
and !==
) 尝试对两个相同操作数进行相等比较,如果它们的类型不相等,那么永远会返回false。
标准相等操作符(==
and !=
) 当两个操作数类型不相等时,会在比较前尝试将其转换为相同类型。
严格相等操作符 (===
and !==
) 尝试对两个相同操作数进行相等比较,如果它们的类型不相等,那么永远会返回false。
说起正则,就头大,怎么看也云里雾里。它对我来说就像一座山,走到山脚下都极其费力,更别说要登上这座山,征服它,做梦…
实在是那些特殊字符的含义读起来简直就像一门外星语…
哎,总之,古人说,锲而不舍,朽木可琢。只要一步一步走,总能到山脚下,一步一步爬,总能登顶,虽难登,征服它却也不是不可能。白日梦者梦白日,总有做不完的梦,和到的了的目标。
作为逻辑表达式进行求值是从左到右,它们是为可能的“短路”的出现而使用以下规则进行测试:
逻辑的规则,保证这些评估是总是正确的。请注意,上述表达式的anything部分不会被求值,所以这样做不会产生任何副作用。
常见的是用于函数声明变量时,用这个方法设定初始值
一元操作符仅对应一个操作数。
delete
操作符,删除一个对象或一个对象的属性或者一个数组中某一个键值。
1 | delete objectName; |
所谓闭包,就是嵌套函数。
内部函数可以访问定义在外部函数中的所有变量和函数,以及外部函数能访问的所有变量和函数。
但是,外部函数却不能够访问定义在内部函数中的变量和函数。
当内部函数以某一种方式被任何一个外部函数作用域访问时,一个闭包就产生了。
一个 label
提供了一个可以让你引用到您程序别的位置的标识符。例如,你可以用 label
标识一个循环, 然后使用 break
或者 continue
来指出程序是否该停止循环还是继续循环。1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16var x = 0;
var z = 0
labelCancelLoops: while (true) {// 标识 labeled 语句
console.log("外部循环: " + x);
x += 1;
z = 1;
while (true) {
console.log("内部循环: " + z);
z += 1;
if (z === 10 && x === 10) {
break labelCancelLoops;// 终止循环 labelCancelLoops
} else if (z === 10) {
break;
}
}
}
JavaScript是一种动态类型语言(dynamically typed language)。
就在刚刚之前对于 String
和 Number
因为 运算符 相互转换这件事还是懵的状态。
在读 MDN 文档时突然发现,-
号是直接用于数值计算的:1
2'12' + 1; // '121' String
'12' - 1; // 11 Number
es6 之前只有 全局变量
和 局部变量
,没有 语句块
。
例如代码将在控制台输出 5
,因为 x
的作用域是声明了 x
的那个函数(或全局范围),而不是 if
语句块:1
2
3
4if (true) {
var x = 5; // 因为 var 声明的变量没有 语句块 的作用,所以 x 的作用域在 if 的父级,即全局
}
console.log(x); // 5
如果使用 ECMAScript 6 中的 let
声明,上述行为将发生变化。1
2
3
4if (true) {
let y = 5; // es6 新增的 let 声明的变量遵循块级作用域,作用域在 {...} 内,所以在 if 语句外获取不到。
}
console.log(y); // ReferenceError: y is not defined