知识卡片
避免类型包装器
内容
new Boolean(false)/new Number(...)/new String(...) 返回带 valueOf 的包装对象而非原始值,没必要还易混淆(包装假值对象条件判断中仍为真)。不应用这些构造器;同理避免 new Object/new Array,改用字面量 {}/[]。发散:值语义和对象语义应区分,混用会产生看似false实为true的反直觉行为。
参考来源
- 位置:《JavaScript语言精粹(修订版)》附录B《糟粕 Bad Parts》"类型的包装对象"一节
- 结论依据:原文说明 `new Boolean(false)` 返回一个带 valueOf 方法的对象而非布尔值本身,"这其实完全没有必要,并且有时还令人困惑",并建议不使用 new Boolean/Number/String,也建议不用 new Object/new Array 而改用字面量,据此推出应避免类型包装对象的结论。
- 原始内容:JavaScript有一套类型的包装对象。例如:new Boolean(false) 会返回一个对象,该对象有一个valueOf方法会返回被包装的值。这其实完全没有必要,并且有时还令人困惑。不要使用new Boolean、new Number或new String。此外也请避免使用new Object和new Array。可使用{}和[]来代替。