Jason_Xie
2015-10-21 23:10
老师在类型检测小结的ppt中,总结了“通过{}.toString拿到,适合内置对象和基元类型。。。。”
请问:
1、这里说的基元类型是指javascript的基本数据类型吗?如果不是,那是指的什么?
2、
Object.prototype.toString.apply('abc') // 返回"[object String]" Object.prototype.toString.apply(new String('abc'))//返回"[object String]"
上面两种情况下都返回的同样的结果,可是一个是 string类型的字符串,一个是String对象,两者的类型不一样。是否这种判断数据类型的方法不适合基本的数据类型?
希望老师能够帮忙解答,有什么不对的希望老师能够指出。谢谢
是的。e.g.
var str = "helloworld";
Object.prototype.toString.apply(str);
return: "[object String]"
明显是创建了一个临时的包装对象,new String(str);
具体参见 JavaScriot权威指南 3.6节包装对象(Wrapper Objects)
比较懒就不敲字啦 :)
Object.prototype.toString.call(this); 这里的参数是一个对象,所以将‘abc’转换为String对象了。
我的理解是:调用apply的时候,由于stirng类型没有这个方法,所以就将字符串转换成了它对应的包装类,进而调用了String对象上的prototype.toString方法。
个人理解,错了望原谅:其实我觉得它返回的都是Object是因为apply的作用域是在Object中,你判断一个字符串感觉就是“字符串在对象里,你要调用字符串,字符串指针指向Object,所以都是同样的结果。”
JavaScript深入浅出
281102 学习 · 1020 问题
相似问题