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

来源:1-5 [JavaScript]类型检测

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对象,两者的类型不一样。是否这种判断数据类型的方法不适合基本的数据类型?

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

写回答 关注

4回答

  • hey自然
    2015-12-28 11:06:02
    已采纳

    是的。e.g. 

    var str = "helloworld";

    Object.prototype.toString.apply(str);

    return: "[object String]"

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

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

    比较懒就不敲字啦 :)

    Jason_...

    非常感谢!

    2016-05-30 23:14:24

    共 1 条回复 >

  • Down_Up
    2016-04-30 15:05:56

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

  • Jason_Xie
    2015-10-22 20:22:50

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

  • KokoTa
    2015-10-21 23:37:07

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

    Jason_...

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

    2015-10-22 20:23:57

    共 1 条回复 >

JavaScript深入浅出

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

281112 学习 · 1020 问题

查看课程

相似问题