JavaScript

在这,你可以学到有关JS中零碎的、有用的、有趣的小知识点。

true 与 false

在JS中,只有6种情况下是无法通过if判断的,

if (false) // false
if ('') // false
if (0) // false
if (NaN) // false
if (undefined) // false
if (null) // false

而其他的都是true,

if ([]) // true
if ({}) // true
if (new Boolean(false)) // true
if ('0') // true
// ...等等

!! 操作符

我们可以使用!!操作符将变量转化为布尔值。

&& 操作符

1.如果存在一下代码:

if (a) {
    alert();
}

我们可以使用&&来简写,将条件和执行语句写在一起:

a && alert();

2.当我们需要取某个对象下的属性时,且不能确定该属性是否存在时,也可以使用&&操作符。

user && user.name;

|| 操作符

利用||操作符,设置默认变量。如果该运算符左边是false,那此时右侧的值就是默认的值。

var checkName = '';
var youName = checkName || 'Tom'; // 取右侧的默认值。

字符串转数字

巧用+运算符或-0(减零)运算。

var str1 = '123';
console.log(str1 - 0); // 123
var str2 = '123';
console.log(+str2); // 123

数值向下取整

除了Math.floor()方法,我们还可以巧用~~、>>或|。

console.log(~~3.56);      // 3
console.log(12.67 >> 0);  // 12
console.log(-1.5634 | 0); // -1

字符串转换为数字并取整

我们可以先转化再取整或使用parseInt()方法,当然,我们还有其他的选择。

console.log('3.1425' | 0); // 3
console.log('7.86'^0);     // 7

变量值交换

var a = 5;
var b = 9;
a = [b, b = a][0];
console.log(a); // 9
console.log(b); // 5

定义变量

(function() {
    var a = b = 123;
})();

console.log(b); // 123
console.log(a); // 报错 Uncaught ReferenceError: a is not defined

连续赋值时,我们发现第二个变量b是个非局部变量,在自执行外部是可以访问到的。其实这个在函数内部不使用var赋值是一样的,根据作用域链,使得这些变量变成全局变量。所以,需要注意书写方式。

遍历一个对象的属性名到数组

var arr = [];

for (arr[arr.length] in obj);
console.log(arr);

for循环中,每个属性名传给in前面的变量,而数组的arr.length位置正好是数组中最后一个元素的后一个,此时赋值后,对应的length又会增加,因此,可以循环下去,而最后结束时,arr中的各项也就是obj中的可遍历的属性名。