为了账号安全,请及时绑定邮箱和手机立即绑定

通过{}.toString 检测类型的问题

老师在类型检测小结的ppt中,总结了“通过{}.toString拿到,适合内置对象和基元类型。。。。”

请问: 

1、这里说的基元类型是指javascript的基本数据类型吗?如果不是,那是指的什么?

2、

Object.prototype.toString.apply('abc')  // 返回"[object String]"
Object.prototype.toString.apply(new String('abc'))//返回"[object String]"

上面两种情况下都返回的同样的结果,可是一个是 string类型的字符串,一个是String对象,两者的类型不一样。是否这种判断数据类型的方法不适合基本的数据类型?

希望老师能够帮忙解答,有什么不对的希望老师能够指出。谢谢

正在回答

4 回答

是的。e.g. 

var str = "helloworld";

Object.prototype.toString.apply(str);

return: "[object String]"

明显是创建了一个临时的包装对象,new String(str);

具体参见 JavaScriot权威指南 3.6节包装对象(Wrapper Objects)

比较懒就不敲字啦 :)

1 回复 有任何疑惑可以回复我~
#1

Jason_Xie 提问者

非常感谢!
2016-05-30 回复 有任何疑惑可以回复我~

Object.prototype.toString.call(this);    这里的参数是一个对象,所以将‘abc’转换为String对象了。

0 回复 有任何疑惑可以回复我~

我的理解是:调用apply的时候,由于stirng类型没有这个方法,所以就将字符串转换成了它对应的包装类,进而调用了String对象上的prototype.toString方法。

2 回复 有任何疑惑可以回复我~

个人理解,错了望原谅:其实我觉得它返回的都是Object是因为apply的作用域是在Object中,你判断一个字符串感觉就是“字符串在对象里,你要调用字符串,字符串指针指向Object,所以都是同样的结果。”

0 回复 有任何疑惑可以回复我~
#1

Jason_Xie 提问者

我的理解是:调用apply的时候,由于stirng类型没有这个方法,所以就将字符串转换成了它对应的包装类,进而调用了String对象上的prototype.toString方法。
2015-10-22 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消
JavaScript深入浅出
  • 参与学习       281100    人
  • 解答问题       1020    个

由浅入深学习JS语言特性,且解析JS常见误区,从入门到掌握

进入课程

通过{}.toString 检测类型的问题

我要回答 关注问题
意见反馈 帮助中心 APP下载
官方微信