JavaScript的数据类型都有什么? JavaScript中 toStirng() 与 Object.prototype.toString().call()

 

JavaScript的数据类型都有什么? (via  BAT互联网公司2014前端笔试面试题:JavaScript篇  http://www.sxt.cn/u/756/blog/4508)

      基本数据类型:String,boolean,Number,Undefined, Null

  引用数据类型: Object(Array,Date,RegExp,Function)

疑问:这些基本的数据类型的值都是常量,而常量是没有方法的,为什么能够调用方法呢?答案是这样的,五种基本类型除了null、undefined以外都有与之对应的特殊的引用类型——包装类型。当代码被解释执行时,底层会对基本类型做一个类型转换,即将基本类型转换成引用类型,这样就可以调用相应引用类型有权访问到的方法。

via  JavaScript中toStirng()与Object.prototype.toString.call()方法浅谈 http://www.zhufengpeixun.cn/JavaScriptmianshiti/2014-02-28/271.html

via js判断是否为数组的函数: isArray()_javascript技巧_脚本之家 http://www.jb51.net/article/28737.htm 

if (value instanceof Array || 

(!(value instanceof Object) && 

(Object.prototype.toString.call((value)) == '[object Array]') || 

typeof value.length == 'number' && 

typeof value.splice != 'undefined' && 

typeof value.propertyIsEnumerable != 'undefined' && 

!value.propertyIsEnumerable('splice'))) { 

return 'array'; 

} 

 

自定义类型 function Person(name, age) {

    this.name = name;

    this.age = age;

}

var person = new Person("Rose", 18);

Object.prototype.toString.call(arr); //”[object Object]”

很明显这种方法不能准确判断person是Person类的实例,而只能用instanceof 操作符来进行判断,如下所示:

console.log(person instanceof Person);//输出结果为true

判断原生JSON对象:
var isNativeJSON = window.JSON && Object.prototype.toString.call(JSON);

console.log(isNativeJSON);//输出结果为”[object JSON]”说明JSON是原生的,否则不是;
注意:Object.prototype.toString()本身是允许被修改的,而我们目前所讨论的关于Object.prototype.toString()这个方法的应用都是假设toString()方法未被修改为前提的。
本文所讨论内容多参考于《JavaScrip高级编程》第三版
 
  


 

JavaScript toString()                        参考:http://www.w3school.com.cn/jsref/jsref_toString_boolean.asp

Object.prototype                              返回 [object Object]

Object.prototype.toString.call()        跟下面 toString() 的形式,其实一个意思,返回的结果可以参考  JavaScript toString()

Object.prototype.toString().call()     参考:http://blog.csdn.net/spy19881201/article/details/12192767

 

 

示例: 

alert(Object.prototype.hasOwnProperty("toString"));     //  返回 true 
alert(Object.prototype.__proto__.hasOwnProperty("toString"));//报错

alert ("ad12".nodeType); // 返回 undefined ////// 出处 Object.prototype.toString( ).call() http://blog.sina.com.cn/s/blog_89e8215901012b10.html 

'[object Object]':

        if (undefined !== value.nodeType) {

            if (3 == value.nodeType) {

                return (/\S/).test(value.nodeValue) ? 'textnode': 'whitespace';

            } else {

                return 'element';

            }

        } else {

            return 'object';

alert(Object.prototype); // 返回 [object Object] 

alert(Object.prototype.toString); // 返回 function toString{[native code]} 

alert(Object.prototype.toString.call([123]));          //返回[object Array]

alert(Object.prototype.toString.call('123'));          //返回[object String]

alert(Object.prototype.toString.call(/123/));          //返回[object RegExp]

alert(Object.prototype.toString.call(123));            //返回[object Number]

alert(Object.prototype.toString.call(undefined));      //返回[object Undefined]

alert(Object.prototype.toString.call(null));           //返回[object Null]

 

你可能感兴趣的:(JavaScript)