-
Notifications
You must be signed in to change notification settings - Fork 1
js小知识
在《你不知道的JS(一)》中有提到这两种写法,其实没有什么区别,随自己喜好。
通常 我们判断一个值是否有就直接是:
if(value) {
do something;
}
在大部分情况下,是明确正确的情况就做什么,比如value不为空,为true。
双重否定就是肯定,或许我们第一反应是 !!value == value,但其实不然。下面的例子就能很好的说明这一点:
typeof new String('123') && new String('123')
> String{0: "1", 1: "2", 2: "3", length: 3, [[PrimitiveValue: "123"]]}
typeof new String('123') && !!new String('123')
> true
当我们需要确定的布尔类型值,用!!做运算是最好,否则就会直接返回结果。
![] (https://github.com/camiler/learnblog/blob/master/imgs/tostring.png?raw=true)
1、for-in: 针对对象的循环,循环可枚举键名,对象中属性中的enumable为true的属性,同时还会循环prototype链上的可枚举属性。
2、for: 循环数组
3、for-of: 遍历获得键值。循环遍历具有@@iterator遍历器的对象,数组本身具有遍历器,所以可以用它来循环数组。一般对象没有遍历器,但可以显示赋予对象遍历器。同时ES6新增的Set和Map结构也具有iterator接口,还有类似数组的对象(字符串、DOM NodeList对象、arguments对象)都可以通过for-of循环遍历值。
void 运算符会对给定的表达式进行求值,然后直接返回 undefined。
void (0) 等同于 void 0
void 0;
void "hello";
void (new Date());
上面的语句都会返回undefined,为什么我们不直接返回undefined呢?
首先,我们要明确undefined并不是一个保留字,它实际上是一个全局对象属性,所以可以允许作为一个变量名。那么可能在js代码存在这样的赋值:
var undefined = "value";
这样直接返回undefined时,就返回了"value"了。 更多解答参考stackoverflow
另外,void还有个用法就是把函数声明识别成函数表达式。用于立即执行的函数表达式。MDN
void function func(){
console.log('void func');
}();