JS逗号运算符和undefined

逗号运算符

先看外面的括号(优先级高),然后返回,后面的值逗号运算符会返回 “()” 中的最后一个

1
2
3
4
let a = 42, b;
b = (a++, a);
console.log(a); // 43
console.log(b); // 43

a++, a中的第二个表达式 a 在 a++ 之后执行,结果为 43 ,并被赋值给 b。

如果去掉 () 会出现什么情况 ?

1
2
3
4
let a = 42, b;
b = a++, a;
console.log(a); // 43
console.log(b); // 42

原因是逗号运算符的优先级比 = 低。b = a ++ , a 可以理解为 (b = a ++) , a。

1
2
3
4
5
6
7
8
9
10
11
12
13
let x = (1, 2);
console.log(x); // 2

let f = (
function f() {
return "1";
},
function g() {
return 2;
}
)(); //f是函数g()执行后的返回值,所以f是2

console.log(typeof f); // number

undefined

undefined returned when trying to access an undeclared object property:

1
2
3
4
var obj = {}
console.log(obj.a) // undefined

console.log(window.a) // undefined