关于String()
和toString()
首先我想说的就是String()
和toString()
方法
首先呢,toString()
方法是几乎每个对象都有的方法,但是对于不同的对象这个方法的功能是不一样的(因为重写了嘛)。而String()
方法时一个全局的方法,所以他的实现功能就是固定的。就像是MDN上面说的。
String 全局对象是一个用于字符串或一个字符序列的构造函数。
关于isNaN()
然后就是关于isNaN()
函数的问题,这个函数会判断一个对象是不是NaN
,实际上这个函数也就是在函数内部进行了一个显式的类型转换,调用的是Number()
函数,所以这个isNaN()
的不少判断结果的疑问也就可以略微解答了。
多插一嘴
额外的一嘴,其实吧现在我觉得任何一个东西(至少是在这门语言内)其实都没有那么的理所当然,都是有原因的,甚至这个原因都离我们并不遥远(我以为我知道我要说什么了,实际上是我连自己知道什么,要说什么都忘记了)
callee
和caller
其实我觉得arguments.callee
和Function.caller
这两个属性还是挺厉害的。不过在ES5标准模式里面就不让用了。
arguments.callee
属性值为指向这个函数本身的指针Function.caller
属性值为指向这个函数调用环境的指针
关于xxx is not defined
其实一开始我一直没有搞清楚为什么有时候调用一个未定义的对象他的值回事undefined
而有时候调用就会报错。
知道现在我才搞清楚,原来是如果你调用一个未声明的变量的话,那么系统就会报错ReferenceError: xx is not defined
(typeof除外),但是呢如果你是直接使用一个没有被定义的对象属性的话,那么这个对象属性的值就会是undefine
(PS: 其实我觉得吧,应该是我们在使用调用这个未被定义的兑现属性的时候其实就已经是相当于在声明这个对象属性了)