js的类型转换——对象的类型转换

    技术2024-11-12  10

    js的类型转换

    js是一种弱类型语言,不必像强类型语言那样必须表明类型;这种不必表明类型使得js使用上更便捷但也使js丢失部分严密性(这在编写长而复杂的程序是很有用的);js能实现在这弱类型,很简单地处理数据类型,很重要一点是js的自动类型转换。

    js的自动类型转换基本规则是,当前环境中需要的是什么类型的数据就把不是这个类型的数据转换成对应适合的类型,比如if条件里面,就会数字装换成boolean类型;

    需要额外说明的是对象类型的自动转换规则:对象不像其它基础类型可以比较直观的转换:如字符串转数字,发现是数字字符串就直接转成数字,字母字符的就为NaN。但是对象不同,因为对象很大程度是一种自定义的新类型,对于这种自定义的类型js没有硬性给出转换规则,而是把这种转换规则交给了开发员来指定

    开发员怎么指定转换?js对对象的自动转换是读取对象的toString()或valueOf()函数来获取应该转成什么。比如js的内置Array对象,它就定义好了toString()函数,当需要把Array转换成字符串时js就会自动调用Array的toString(),把数组每个元素都改成字符串然后用逗号连接起来返回一个字符串如:[1,2,3]会自动转成"1,2,3"。

    toString()是转换字符串时调用的,valueOf是转换成除字符串外的原始类型(通常是数字)时使用的;比如js内置的Number和Boolean对象的转换行为,js定义这两个对象的valueOf()这才使得这两种对象的行为和它们原型类型相似的原因。

    但是注意一点,在同时存在toString()和valueOf()的情况下,转字符串时,valueOf的优先级会比toString()的高,所以是会转成valueOf返回的原始类型(如果返回不是字符串再原始类型转字符串),这时想要转字符串就要显式调用toString()

    再请注意一点,valueOf的含义,valueOf不等于NumberOf可以从名字发现区别,valueOf返回的应该是对象合理的原始值可以是数字也可以是其它的bool等。

    参考:《JavaScript高级程序设计》第四版

    Processed: 0.012, SQL: 9