- 兩個為真對象不相等
var x = [0];
if ([0]) {
console.log(x == true);
} else {
console.log("false");
}
// false 并非字符串的 “false”
- map方法遇到 "undefined" 時不做處理
var a = Array(3);
a[0] = 8;
a = a.map(function(elem) {
return "2";
})
console.log(a);
// [8, undefined × 2]
- 報錯:Reduce of empty array with no initial value
[[3,2,1].reduce(Math.pow),[].reduce(Math.pow)]
// 報錯:Reduce of empty array with no initial value
[3,2,1].reduce(Math.pow)
// 9
- delete length ?
function show() {}
delete show.length;
console.log(typeof show.length);
// number
- 函數(shù)表達(dá)式?jīng)]有變量提升
(function() {
var x = foo();
var foo = function foo() {
return "bar"
};
console.log(x);
return x;
})();
// Uncaught TypeError: foo is not a function
- 連等賦值,a 為全局變量
(function() {
var b = a = 1;
})();
console.log(a);
console.log(b);
// a 輸出 1;
// b 輸出 Uncaught ReferenceError: b is not defined
- 對象操作和連等賦值
var a = {n:1};
var b = a; // 持有a脯宿,以回查
a.x = a = {n:2};
alert(a.x);// --> undefined
alert(b.x);// --> {n:2}
.運算優(yōu)先于=賦值運算檩咱,因此此處賦值可理解為
1.聲明a對象中的x屬性管跺,用于賦值,此時b指向a粘捎,同時擁有未賦值的x屬性
2.對a對象賦值,此時變量名a改變指向到對象{n:2}
3.對步驟1中x屬性,也即a原指向?qū)ο蟮膞屬性惭嚣,也即b指向?qū)ο蟮膞屬性賦值
賦值結(jié)果:
a => {n: 2}
b => {n: 1, x: {n: 2 } }
javascript 連等賦值問題
var obj1 = { x: 5 };
var obj2 = obj1;
obj1.a = obj1 = { x: 6 };
console.log(obj1.a);
console.log(obj2.a);
// undefined
// {x: 6}
- 構(gòu)造函數(shù)返回一個對象
x = {};
function bar() {
this.x = 2;
return x;
}
var foo = new bar();
console.log(foo.x);
// undefined
- 返回值之后的變量提升
function bar() {
return foo;
foo = 10;
function foo() {}
var foo = 11;
}
console.log(typeof bar())
// 'function'
- 作用域
var x = 3;
var foo = {
x: 2,
baz: {
x: 1,
bar: function() {
return this.x;
}
}
}
var go = foo.baz.bar;
console.log(go());
console.log(foo.baz.bar());
// 3
// 1
- 閉包
function fun1() {
var n = 167;
nAdd = function() {
n += 1;
}
function fun2() {
return n;
}
return fun2;
}
var result = fun1();
var a = result();
nAdd();
var b = result();
console.log(a);
console.log(b);
// 167
// 168
- return 之后
var foo = 1;
function bar() {
foo = 10;
return;
function foo() {}
}
bar();
console.log(foo);
// 1 foo = 10 已經(jīng)失效
- arguments 修改值
function foo(a) {
arguments[0] = 2;
console.log(a);
}
foo(1);
// 2