let str = 100 + true + 21.2 + null + undefined + 'Tencent' + [] + null + 9 + false;
[] == false;
![] == false;
{} + 0 ? alert('ok') : alert('no');
0 + {} ? alert('ok') : alert('no');
// example 1
var a = {}, b = '0', c = 0;
a[b] = '你好';
a[c] = '吃饭';
console.log(a[b]); // '吃饭'
/**
* 解析:
* a['0'] == a[0] 值会被替换
*/
// –––––––––––––––––––––––––––––––––––
// example 2
var a = {}, b = Symbol('1'), c = Symbol('1');
a[b] = '你好';
a[c] = '吃饭';
console.log(a[b]); // '你好'
/**
* 解析:
* Symbol 会创建唯一的值,所以 b 和 c 不相等,a[b] != a[c]
* 那么 a[b] == '你好'
*/
// –––––––––––––––––––––––––––––––––––
// example 3
var a = {}, b = {a:'1'}, c = {m:'2'};
a[b] = '你好';
a[c] = '吃饭';
console.log(a[b]); // '吃饭'
/**
* 解析:
* a[b] == a['[object Object]']
* a[c] == a['[object Object]']
* 所以会指向同一个属性值
* 最终a[b]结果为'吃饭'
*/
/**
* 在JS中对象的属性名是什么格式的?
* 普通对象的属性名只能是“字符串” (普通对象的属性名可以是基本数据类型值)
* Map 这种数据结构支持 对象作为属性名
*
*
* 但是普通对象的属性名不能是对象,如果是对象,需要转换为字符串存储'[object Object]'
* 普通对象转换为字符串是通过调用Object.prototype.toString(检测数据类型)
*/