精华内容
下载资源
问答
  • js数据类型有几种

    2021-05-17 21:27:35
    判断js中的数据类型有一下几种方法:typeof、instanceof、 constructor、 prototype、 $.type()/jquery.type(),接下来主要比较一下这几种方法的异同。 先举几个例子: 1 2 3 4 5 6 ...

    判断js中的数据类型有一下几种方法:typeof、instanceof、 constructor、 prototype、 $.type()/jquery.type(),接下来主要比较一下这几种方法的异同。

    先举几个例子:

    1

    2

    3

    4

    5

    6

    var a = "iamstring.";

    var b = 222;

    var c= [1,2,3];

    var d = new Date();

    var e = function(){alert(111);};

    var f = function(){this.name="22";};  

    1、最常见的判断方法:typeof

    1

    2

    3

    4

    5

    6

    alert(typeof a)  ------------> string

    alert(typeof b)  ------------> number

    alert(typeof c)  ------------> object

    alert(typeof d)  ------------> object

    alert(typeof e)  ------------> function

    alert(typeof f)  ------------> function

    其中typeof返回的类型都是字符串形式,需注意,例如:

    1

    2

    alert(typeof a == "string") -------------> true

    alert(typeof a == String) ---------------> false

    另外typeof 可以判断function的类型;在判断除Object类型的对象时比较方便。 

    2、判断已知对象类型的方法: instanceof

    1

    2

    3

    4

    alert(c instanceof Array) ---------------> true

    alert(d instanceof Date)

    alert(f instanceof Function) ------------> true

    alert(f instanceof function) ------------> false

    注意:instanceof 后面一定要是对象类型,并且大小写不能错,该方法适合一些条件选择或分支。   

    3、根据对象的constructor判断: constructor

    alert(c.constructor === Array) ----------> true
    alert(d.constructor === Date) -----------> true
    alert(e.constructor === Function) -------> true

    注意: constructor 在类继承时会出错

    eg:

    1

    2

    3

    4

    5

    6

    function A(){};

    function B(){};

    A.prototype = new B(); //A继承自B

    var aObj = new A();

    alert(aobj.constructor === B) -----------> true;

    alert(aobj.constructor === A) -----------> false;

    而instanceof方法不会出现该问题,对象直接继承和间接继承的都会报true:

    1

    2

    alert(aobj instanceof B) ----------------> true;

    alert(aobj instanceof B) ----------------> true;

    言归正传,解决construtor的问题通常是让对象的constructor手动指向自己:

    1

    2

    3

    aobj.constructor = A; //将自己的类赋值给对象的constructor属性

    alert(aobj.constructor === A) -----------> true;

    alert(aobj.constructor === B) -----------> false; //基类不会报true了;

    4、通用但很繁琐的方法: prototype

    1

    2

    3

    4

    5

    6

    alert(Object.prototype.toString.call(a) === ‘[object String]') -------> true;

    alert(Object.prototype.toString.call(b) === ‘[object Number]') -------> true;

    alert(Object.prototype.toString.call(c) === ‘[object Array]') -------> true;

    alert(Object.prototype.toString.call(d) === ‘[object Date]') -------> true;

    alert(Object.prototype.toString.call(e) === ‘[object Function]') -------> true;

    alert(Object.prototype.toString.call(f) === ‘[object Function]') -------> true;

    大小写不能写错,比较麻烦,但胜在通用。

    5、无敌万能的方法:jquery.type()

    如果对象是undefined或null,则返回相应的“undefined”或“null”。

    1

    2

    3

    4

    jQuery.type( undefined ) === "undefined"

    jQuery.type() === "undefined"

    jQuery.type( window.notDefined ) === "undefined"

    jQuery.type( null ) === "null"

    如果对象有一个内部的[[Class]]和一个浏览器的内置对象的 [[Class]] 相同,我们返回相应的 [[Class]] 名字。 (有关此技术的更多细节。 )

    1

    2

    3

    4

    5

    6

    7

    8

    jQuery.type( true ) === "boolean"

    jQuery.type( 3 ) === "number"

    jQuery.type( "test" ) === "string"

    jQuery.type( function(){} ) === "function"

    jQuery.type( [] ) === "array"

    jQuery.type( new Date() ) === "date"

    jQuery.type( new Error() ) === "error" // as of jQuery 1.9

    jQuery.type( /test/ ) === "regexp"

    其他一切都将返回它的类型“object”。

    通常情况下用typeof 判断就可以了,遇到预知Object类型的情况可以选用instanceof或constructor方法,实在没辙就使用$.type()方法。

    以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持脚本之家!

    展开全文
  • 现如今的基本数据类型(原始类型)有几种? 5?6?7?答曰都对;es5中是五种:Number、String、Boolean、undefined、Null;在es6中新加了一种:Symbol ;而现如今在谷歌67版本中还出现了一种 :bigInt;故而从最新的...

    js的数据类型

    现如今的基本数据类型(原始类型)有几种?

    5?6?7?答曰都对;es5中是五种:Number、String、Boolean、undefined、Null;在es6中新加了一种:Symbol ;而现如今在谷歌67版本中还出现了一种 :bigInt;故而从最新的角度来说一共有七种;如下图所示:

    在这里插入图片描述

    具体js数据类型解释如下:

    ####  原始数据类型:
    -  布尔类型:布尔表示一个逻辑实体,可以有两个值:true 和 false。
    -  Null 类型:Null 类型只有一个值: null。
    -  Undefined 类型:一个没有被赋值的变量会有个默认值 undefined。
    -  数字类型:根据 ECMAScript 标准,JavaScript 中只有一种数字类型:基于 IEEE 754 标准的双精度 64 位二进制格式的值(-(253 -1) 到 253 -1)。它并没有为整数给出一种特定的类型。除了能够表示浮点数外,还有一些带符号的值:+Infinity,-Infinity 和 NaN (非数值,Not-a-Number)。
    -  BigInt 类型:BigInt类型是 JavaScript 中的一个基础的数值类型,可以用任意精度表示整数。使用 BigInt,您可以安全地存储和操作大整数,甚至可以超过数字的安全整数限制。BigInt是通过在整数末尾附加 n 或调用构造函数来创建的。
    -  String字符串类型:JavaScript的字符串类型用于表示文本数据。它是一组16位的无符号整数值的“元素”。在字符串中的每个元素占据了字符串的位置。第一个元素的索引为0,下一个是索引1,依此类推。字符串的长度是它的元素的数量。
    - Symbols符号类型:符号(Symbols)是ECMAScript 第6版新定义的。符号类型是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值(如下). 在某些语言当中也有类似的原子类型(Atoms). 你也可以认为为它们是C里面的枚举类型。
    #### 引用数据类型:
    - Object对象: 在计算机科学中, 对象是指内存中的可以被 标识符引用的一块区域。
    
    展开全文
  • 在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示: 基本类型:String、Number、Boolean、Symbol、Undefined、Null 引用类型:Object Function Date ... 基本类型也...

    在 ECMAScript 规范中,共定义了 7 种数据类型,分为 基本类型 和 引用类型 两大类,如下所示:

    基本类型:String、Number、Boolean、Symbol、Undefined、Null 

    引用类型:Object Function Date ...

    基本类型也称为简单类型,由于其占据空间固定,是简单的数据段,为了便于提升变量查询速度,将其存储在栈中,即按值访问。

    引用类型也称为复杂类型,由于其值的大小会改变,所以不能将其存放在栈中,否则会降低变量查询速度,因此,其值存储在堆(heap)中,而存储在变量处的值,是一个指针,指向存储对象的内存处,即按址访问。引用类型除 Object 外,还包括 Function 、Array、RegExp、Date 等等。

    鉴于 ECMAScript 是松散类型的,因此需要有一种手段来检测给定变量的数据类型。对于这个问题,JavaScript 也提供了多种方法,但遗憾的是,不同的方法得到的结果参差不齐。

    下面介绍常用的4种方法,并对各个方法存在的问题进行简单的分析。

    1、typeof

    typeof 是一个操作符,其右侧跟一个一元表达式,并返回这个表达式的数据类型。返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、string、object、undefined、function 等。

    typeof ''; // string 有效
    typeof 1; // number 有效
    typeof Symbol(); // symbol 有效
    typeof true; //boolean 有效
    typeof undefined; //undefined 有效
    typeof null; //object 无效
    typeof [] ; //object 无效
    typeof new Function(); // function 有效
    typeof new Date(); //object 无效
    typeof new RegExp(); //object 无效

    有些时候,typeof 操作符会返回一些令人迷惑但技术上却正确的值:

    • 对于基本类型,除 null 以外,均可以返回正确的结果。
    • 对于引用类型,除 function 以外,一律返回 object 类型。
    • 对于 null ,返回 object 类型。
    • 对于 function 返回  function 类型。

    其中,null 有属于自己的数据类型 Null , 引用类型中的 数组、日期、正则 也都有属于自己的具体类型,而 typeof 对于这些类型的处理,只返回了处于其原型链最顶端的 Object 类型,没有错,但不是我们想要的结果。

    2.instanceof

    instanceof 是用来判断 A 是否为 B 的实例,表达式为:A instanceof B,如果 A 是 B 的实例,则返回 true,否则返回 false。 在这里需要特别注意的是:instanceof 检测的是原型,我们用一段伪代码来模拟其内部执行过程:

    instanceof (A,B) = {
        var L = A.__proto__;
        var R = B.prototype;
        if(L === R) {
            // A的内部属性 __proto__ 指向 B 的原型对象
            return true;
        }
        return false;
    }

    从上述过程可以看出,当 A 的 __proto__ 指向 B 的 prototype 时,就认为 A 就是 B 的实例,我们再来看几个例子:

    [] instanceof Array; // true
    {} instanceof Object;// true
    new Date() instanceof Date;// true
     
    function Person(){};
    new Person() instanceof Person;
     
    [] instanceof Object; // true
    new Date() instanceof Object;// true
    new Person instanceof Object;// true

    我们发现,虽然 instanceof 能够判断出 [ ] 是Array的实例,但它认为 [ ] 也是Object的实例,为什么呢?

    我们来分析一下 [ ]、Array、Object 三者之间的关系:

    从 instanceof 能够判断出 [ ].__proto__  指向 Array.prototype,而 Array.prototype.__proto__ 又指向了Object.prototype,最终 Object.prototype.__proto__ 指向了null,标志着原型链的结束。因此,[]、Array、Object 就在内部形成了一条原型链:

    从原型链可以看出,[] 的 __proto__  直接指向Array.prototype,间接指向 Object.prototype,所以按照 instanceof 的判断规则,[] 就是Object的实例。依次类推,类似的 new Date()、new Person() 也会形成一条对应的原型链 。因此,instanceof 只能用来判断两个对象是否属于实例关系, 而不能判断一个对象实例具体属于哪种类型。

    instanceof 操作符的问题在于,它假定只有一个全局执行环境。如果网页中包含多个框架,那实际上就存在两个以上不同的全局执行环境,从而存在两个以上不同版本的构造函数。如果你从一个框架向另一个框架传入一个数组,那么传入的数组与在第二个框架中原生创建的数组分别具有各自不同的构造函数。

    var iframe = document.createElement('iframe');
    document.body.appendChild(iframe);
    xArray = window.frames[0].Array;
    var arr = new xArray(1,2,3); // [1,2,3]
    arr instanceof Array; // false

    针对数组的这个问题,ES5 提供了 Array.isArray() 方法 。该方法用以确认某个对象本身是否为 Array 类型,而不区分该对象在哪个环境中创建。

    if (Array.isArray(value)){
       //对数组执行某些操作
    }

    Array.isArray() 本质上检测的是对象的 [[Class]] 值,[[Class]] 是对象的一个内部属性,里面包含了对象的类型信息,其格式为 [object Xxx] ,Xxx 就是对应的具体类型 。对于数组而言,[[Class]] 的值就是 [object Array] 。

    3.constructor

    当一个函数 F被定义时,JS引擎会为F添加 prototype 原型,然后再在 prototype上添加一个 constructor 属性,并让其指向 F 的引用。如下所示:

    当执行 var f = new F() 时,F 被当成了构造函数,f 是F的实例对象,此时 F 原型上的 constructor 传递到了 f 上,因此 f.constructor == F

    可以看出,F 利用原型对象上的 constructor 引用了自身,当 F 作为构造函数来创建对象时,原型上的 constructor 就被遗传到了新创建的对象上, 从原型链角度讲,构造函数 F 就是新对象的类型。这样做的意义是,让新对象在诞生以后,就具有可追溯的数据类型。

    同样,JavaScript 中的内置对象在内部构建时也是这样做的:

    细节问题:

    1. null 和 undefined 是无效的对象,因此是不会有 constructor 存在的,这两种类型的数据需要通过其他方式来判断。

    2. 函数的 constructor 是不稳定的,这个主要体现在自定义对象上,当开发者重写 prototype 后,原有的 constructor 引用会丢失,constructor 会默认为 Object

    为什么变成了 Object?

    因为 prototype 被重新赋值的是一个 { }, { } 是 new Object() 的字面量,因此 new Object() 会将 Object 原型上的 constructor 传递给 { },也就是 Object 本身。

    因此,为了规范开发,在重写对象原型时一般都需要重新给 constructor 赋值,以保证对象实例的类型不被篡改。

    4.toString

    toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]] 。这是一个内部属性,其格式为 [object Xxx] ,其中 Xxx 就是对象的类型。

    对于 Object 对象,直接调用 toString()  就能返回 [object Object] 。而对于其他对象,则需要通过 call / apply 来调用才能返回正确的类型信息。

    Object.prototype.toString.call('') ;   // [object String]
    Object.prototype.toString.call(1) ;    // [object Number]
    Object.prototype.toString.call(true) ; // [object Boolean]
    Object.prototype.toString.call(Symbol()); //[object Symbol]
    Object.prototype.toString.call(undefined) ; // [object Undefined]
    Object.prototype.toString.call(null) ; // [object Null]
    Object.prototype.toString.call(new Function()) ; // [object Function]
    Object.prototype.toString.call(new Date()) ; // [object Date]
    Object.prototype.toString.call([]) ; // [object Array]
    Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
    Object.prototype.toString.call(new Error()) ; // [object Error]
    Object.prototype.toString.call(document) ; // [object HTMLDocument]
    Object.prototype.toString.call(window) ; //[object global] window 是全局对象 global 的引用

     

     

     

     

     

    展开全文
  • 首先一听到js数据类型脑子里面就会立马想到六: Undefined类型,Null类型,Boolean类型,Number类型,String类型,Object类型 但是后来ES6新增了Symbol属性,还有谷歌6,7版本中还出现了一bigint属性 Undefined...

    首先一听到js数据类型脑子里面就会立马想到六种:
    Undefined类型,Null类型,Boolean类型,Number类型,String类型,Object类型
    但是后来ES6新增了Symbol类型,还有谷歌6,7版本中还出现了一种bigint属性

    Undefined只是一个值。在var一个变量没有初始化的时候这个变量就是Undefined

    null值表示一个空对象指针,如果定义的变量准备在将来用于保存对象,应该将该变量初始化为null。

    boolean类型有两个值true或false

    Number类型就是数字类型,表示数据的整数和浮点数。某些语言中也称为“双精度值”。包含整数和浮点数(浮点数数值必须包含一个小数点,且小数点后面至少有一位数字)两种值

    String类型就是一个引用数据类型默认为null,也是final类型不能被更改也不能继承

    object类型就是几种基本数据类型被没有顺序的结合在一起,重要的属性是prototype
    使用这个属性可以动态的扩展一个对象的函数或者属性

    Symbol属性这个属性名是独一无二的,可以保证不会与其他属性名产生冲突,是通过Symbol函数生成

    BigInt 类型,是指安全存储、操作大整数。(但是很多人不把这个做为一个类型)。

    值类型(基本类型):字符串(String)、数字(Number)、布尔(Boolean)、对空(Null)、未定义(Undefined)、Symbol。
    基本数据类型: 直接存储在栈(stack)中,占据空间小、大小固定,属于被频繁使用数据,所以放入栈中存储。
    引用数据类型:对象(Object)、数组(Array)、函数(Function)。
    引用数据类型: 同时存储在栈(stack)和堆(heap)中,占据空间大、大小不固定。引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其在栈中的地址,取得地址后从堆中获得实体。

    展开全文
  • js数据类型 基本数据类型5:字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined) 引用类型1: object:Data、function、Array等。这三是常规用的 ES6 中新增了一 ...
  • 目前最新的 ECMAScript 标准中定义了9种数据类型。 其中,7基本数据类型: undefined:为定义 null:空w
  • js数据类型

    2020-06-11 15:00:21
    js数据类型有几种 js数据类型有8种,分别是:Number、String、Boolean、Null、undefined、object、symbol、bigInt。 基本数据类型详解 , 1. Number类型 number类型包含整数和浮点数,这里注意浮点数会自动转换成...
  • JavaScript 中常见数据类型有Number、String、Boolean、Object、Array、Json、Function、Date、RegExp、Error、undefined、Null等十几种。ES6还有新增的数据类型有Symbol、Set、Map等。在实际应用中,我们经常需要...
  • JS数据类型的判断主要有四方法:typeof、instanceof、Object.prototype.toString.call()。 基本数据类型的包括:number、boolean、string、symbol、object、undefined、function等7数据类型 7种数据类型有包含:...
  • 判断js中的数据类型有一下几种方法:typeof、instanceof、 constructor、 prototype、 $.type()/jquery.type(),接下来主要比较一下这几种方法的异同。 先举几个例子: var a = "iamstring."; var b = 222; var c= ...
  • js有几种数据类型

    2020-09-28 08:43:19
    js有几种数据类型 简单数据类型 数字型Number:JavaScript数字类型既可以保存整数,也可以保存小数(浮点数) 。 字符串型String:字符串型可以是引号中的任意文本,其语法为双引号""和单引号” 布尔型Boolean:...
  • js数据类型有哪些?这个很基础的问题,被问到的人可能会想干嘛拿这么简单的弱智问题问我,这怎么会问倒我,不就是那几种么,但是深入下去我们经常会犯一些错误,下面会详细介绍js数据类型及常见的特殊情况,还有如何...
  • 我们在写封装的插件或者函数时,常常用到JS...今天在这里总结一下我个人遇到的可以判断数据类型几种方式。如果哪里写的不对还请指点一下小弟,以免文章误导他人。1. typeof关键字console.log(typeof 2); // numb...
  • JS数据类型包括基本数据类型、复杂数据类型和特殊数据类型,今天我们主要先讲解一下基本数据类型。感兴趣的朋友一起看看吧
  • js获取数据类型的方法一下几种, 1.typeof() 2.Object.prototype.toString.call() 3. instanceof运算符 下面开始介绍 typeof()可以 识别基本类型,但是无法区分array,regexp,{}对象 例子: typeof(1);//...
  • 数据类型分为 基础数据类型和引用(对象)数据类型 ...常见的判断数据类型的方法 第一,当数据类型是undefined null 时,可以用 ===来进行判断 undefined === undefined null === null 第二...
  • JavaScript是一属于网络的脚本...Javascript脚本语言同其他语言一样,它自身的基本数据类型,表达式和算术运算符及程序的基本程序框架。Javascript提供了四基本的数据类型和两特殊数据类型用来处理数据和文...
  • js 判断各种数据类型 typeof 几种类型值 了解js的都知道, 个typeof  用来判断各种数据类型,两种写法:typeof   xxx   ,typeof(xxx)    &...
  •  js原始类型 , 以前 ,现在多了 symbol,  1. number (整数,浮点数 int / float)  2. string 字符串  3.bollean 布尔型 (true false)  4.null (空值)  5.undefined (空值,没有,不存在)  6....
  • 判断js中的数据类型有一下几种方法:typeof、instanceof、 constructor、 prototype、 $.type()/jquery.type(),接下来主要比较一下这几种方法的异同 1、最常见的判断方法:typeof alert(typeof b) ------------> ...
  • js几种数据类型

    2017-05-04 16:24:00
    JS有7种数据类型:三基本类型(数字,字符串,布尔),两引用数据类型(对象,数组),两特殊数据类型(undefined,null)。JS有5原始类型:数字,字符串,布尔,undefined,null。typeof 运算符就是检测变量...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 723
精华内容 289
关键字:

js数据类型有几种