• 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]
    越努力,越幸运.
  • 相关阅读:
    #define #undef
    ps
    Find–atime –ctime –mtime的用法与区别总结
    redis
    linux mutex
    private继承
    boost::noncopyable介绍
    Makefile 中:= ?= += =的区别
    linux Tar 命令参数详解
    Ubuntu14.04安装CMake3.0.2
  • 原文地址:https://www.cnblogs.com/coding2ing/p/4049250.html
Copyright © 2020-2023  润新知