面试题答案
一键面试null
与 undefined
比较
- 隐式转换逻辑:
- 在
==
比较中,null
和undefined
是特殊情况,它们相互比较时不进行其他类型转换,直接返回true
。这是 JavaScript 规范明确规定的。例如:
console.log(null == undefined); // true
- 在
- 设计考量:
- 在 JavaScript 中,
null
表示有意的空缺值,而undefined
表示变量声明但未赋值的状态。在很多编程场景下,这两种情况在语义上比较接近,例如在判断一个值是否存在时,无论是null
还是undefined
都可能表示缺失值,所以让它们在==
比较时返回true
可以简化代码逻辑,提高编程的便利性。
- 在 JavaScript 中,
对象与原始值比较
- 隐式转换逻辑:
- 当对象与原始值进行
==
比较时,对象会尝试通过valueOf()
和toString()
方法转换为原始值。 - 首先,JavaScript 引擎会调用对象的
valueOf()
方法,如果valueOf()
方法返回一个原始值,就使用这个原始值进行比较。 - 如果
valueOf()
方法返回的不是原始值,那么会调用toString()
方法,如果toString()
方法返回一个原始值,就使用这个原始值进行比较。 - 例如:
let obj = { valueOf: function() { return 10; } }; console.log(obj == 10); // true
- 再比如:
let obj2 = { toString: function() { return '20'; } }; console.log(obj2 == 20); // true
- 当对象与原始值进行
- 设计考量:
- 这种设计使得对象在与原始值比较时更加灵活。在实际编程中,对象常常需要与数字、字符串等原始值进行比较。例如,一个表示货币金额的对象可能希望与数字进行比较来判断金额大小,通过提供
valueOf()
或toString()
方法的自定义实现,就可以实现这种灵活的比较逻辑,符合实际编程中的多种需求。
- 这种设计使得对象在与原始值比较时更加灵活。在实际编程中,对象常常需要与数字、字符串等原始值进行比较。例如,一个表示货币金额的对象可能希望与数字进行比较来判断金额大小,通过提供