问答详情
源自:1-5 [JavaScript]类型检测

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

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

请问: 

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

2、

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

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

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

提问者:Jason_Xie 2015-10-21 23:10

个回答

  • 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)

    比较懒就不敲字啦 :)

  • 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,所以都是同样的结果。”