JavaScript中的"奇奇怪怪"

filter等方法的隐式转化
var list = [1,,2,,0,5,9];
console.log(list[1]); // console: undefined
console.log(list[1] !== null); // console.log: undefined

list = list.filter(item => item !== null);
// console: [1, 2, 0, 5, 9]
通过prototype骗过引擎
var proto = {};
var obj = Object.create(proto);

function fn() {};
fn.prototype = proto;

console.log(obj instance fn);
// console: true
浮点数计算问题
0.1 + 0.2 === 0.3     // false
0.1 + 0.05 === 0.15;  // false
0.1 + 0.1 === 0.2;    // true
0.1 + 0.3 === 0.4;    // true
0.2 + 0.2 === 0.4;    // true
0.05 + 0.25 === 0.3;  // true
0.15 + 0.15 === 0.3;  // true
任何操作数与NaN进行关系比较, 结果都为false
"a" <  3// false
"a" >= 3// false
操作未声明变量
var message; // 变量声明之后取得了默认值
// var age;

console.log(message); // console: undefined
console.log(age);
// Uncaught ReferenceError: age is not defined

// 不报错
console.log(typeof message); // console: undefined
console.log(typeof age);     // console: undefined

console.log(window.message); // console: undefined
console.log(window.age);     // console: undefined
console.log打印
var arr = [12];
console.log(arr); // console 显示[1, 2], 展开后实际没有内容, 长度为0(由于下面for循环的操作)

for(var i=0, len = arr.length; i < len; i++) {
    arr.shift();
}
自执行函数
+function() {}()
!function() {}()
-function() {}()
(+function(){}())
new function(){} // 这种写法可以省去最后的一对括号

// 特殊
!function() {return false}()
判断-0
num === -0 // 无法判断是否是-0;因为 0 === -0 也成立

// ES2015 Object.is(value1, value2) 比较两个值是否相同
Object.is(-00);     // false
Object.is(NaNNaN);  // true
posted @ 2019-05-08 23:27  rencoo  阅读(...)  评论(...编辑  收藏