zoukankan      html  css  js  c++  java
  • js的数据类型、判断对象类型 js对象

    1.js中的数据类型有以下几种:

    Number Boolean undefined Object Function String Null

    基本类型:Number Boolean String undefined null

    引用类型:Object Function

    基本类型的数据是存放在栈内存中的,而引用类型的数据是存放在堆内存中的
    2.判断数据类型
    参考学习:http://www.cnblogs.com/ziyunfei/archive/2012/11/05/2754156.html
    在 JavaScript 里使用 typeof 来判断数据类型,只能区分基本类型,即 “number”,”string”,”undefined”,”boolean”,”object” ,“function”六种。

    对于数组,对象,null来说,其关系错综复杂,使用 typeof 都会统一返回 “object” 字符串。

    要想区别对象、数组、函数单纯使用 typeof 是不行的,JavaScript中,通过Object.prototype.toString方法,判断某个对象值属于哪种内置类型。

    例子:

    var arr = [];
    console.log(Object.prototype.toString.call(arr))

    结果:

    “[object Array]”

    在ES3中,Object.prototype.toString方法的规范如下:

    Object.prototype.toString()
    在toString方法被调用时,会执行下面的操作步骤:

    1. 如果this的值为undefined,则返回"[object Undefined]".
    2.如果this的值为null,则返回"[object Null]".
    3.让O成为调用ToObject(this)的结果.
    4. 获取this对象的[[Class]]属性的值。
    5. 计算出三个字符串"[object ", 第一步的操作结果Result(1), 以及 "]"连接后的新字符串。
    6. 返回第二步的操作结果Result(2)。
    

    [[Class]]是一个内部属性,所有的对象(原生对象和宿主对象)都拥有该属性.在规范中,[[Class]]是这么定义的:
    内部属性 描述
    [[Class]] 一个字符串值,表明了该对象的类型。
    其过程简单说来就是:1、获取对象的类名(对象类型)。2、然后将[object、获取的类名、]组合并返回。

    var arr=[1,2];
    
    //直接对一个数组调用toString()
    arr.toString();// "1,2"
    判断是否为数组对象
    //通过call指定arr数组为Object.prototype对象中的toString方法的上下文
    Object.prototype.toString.call(arr); //"[object Array]"
    

    判断对象类型是否为数组

    function isArray(arg) {
        if (typeof arg === 'object') {
            return Object.prototype.toString.call(arg) === '[object Array]';
        }
        return false;
    }
    
    

    3.有关js对象(内置,原生,宿主,全局)

    原生对象(内部对象,本地对象)(native object):独立于宿主环境的ECMAScript实现提供的对象。
    内置对象:由 ECMAScript 实现提供的、独立于宿主环境的所有对象,在 ECMAScript 程序开始执行时出现,即在引擎初始化阶段就被创建好的对象。
    宿主对象:由ECMAScript实现的宿主环境提供的对象,可以理解为:浏览器提供的对象。所有的BOM和DOM都是宿主对象。
    全局对象:全局对象:一般全局对象会有两个,一个是ecma提供的Global对象,一个是宿主提供。如在浏览器中是window、在nodejs中是global。【所以啊,在浏览器中全局对象是Global+window】
    通常情况下ecma提供的Global对象对是不存在的,没有具体的对象,

    原生对象:object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError、Global
    内置对象:Global(全局对象)、Math
    宿主对象:有宿主提供的对象,在浏览器中window对象以及其下边所有的子对象(如bom、dom等等),在node中是globla及其子对象,也包含自定义的类对象。
    全局对象:一般全局对象会有两个,一个是ecma提供的Global对象,一个是宿主提供。

    内置对象之Global
    Global即为全局对象,Global对象是ECMAScript中最特别的对象,因为实际上它根本不存在!
    在ECMAScript中,不存在独立的函数,所有函数都必须是某个对象的方法。
    类似于isNaN()、parseInt()和parseFloat()方法等,看起来都是函数,而实际上,它们都是Global对象的方法。
    而且Global对象的方法还不止这些。

  • 相关阅读:
    一句话开启XP_CMDSHELL
    CF14B Young Photographer 题解
    sql 存储过程与函数区别
    sql索引
    分区表中毒,重装系统
    面试
    XML范例的应用(转载)
    数据结构题目
    网页加载速度的方法和技巧
    设计模式分类
  • 原文地址:https://www.cnblogs.com/princeness/p/11664980.html
Copyright © 2011-2022 走看看