alert(typeof(now + 1))// 调用now.toString(),然后与1拼接,这时就成字符串了,所以alert是string
这里有个示例:
var now=new Date()
// 改写now对象的toString(),返回一个number类型的
now.toString=function(){
return 2
}
alert(typeof(now + 1))// number类型相加,也是number类型的,所以alert是number
在JavaScript中,加号不仅表示相加还表示字符串连接
当加号两边存在字符串时,加号代表连接,实际上是将两侧都转为了字符串,如
"1" + 1 = "11"而当加号两侧都是数字的时候,则表示两个数相加,如
1 + 1 = 2这是JavaScript中的隐式类型转换
显式的类型转换我们都知道,比如to_a、to_s、to_i方法,显示转化一般用于这样的情形: 源类型和目标类型很大程度上不相关或毫无关联
那么,隐式类型转换是什么呢?
隐式类型转换适用于源类型和目标类型很详尽的情形
ruby核心库和标准库大量使用了隐式类型转换,标准类型转换方法如下:
注:隐式、显式方法目标类都已实现
有了这些方法,我们的有些参数检查就不必使用,可以使用隐式方法代替参数检查
eg
一些首字母大写的强制类型转换方法会调用 这些隐式转换方法,如:Array(),Integer(),String()等,但是这些方法处理逻辑并不一致,有的会有限调用隐式方法、无隐式方法时再调用显式方法,有的是直接调用显式方法;具体情况还要看ruby官网文档
eg: