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]