精华内容
下载资源
问答
  • js判断复合数据类型两种方式(typeof不奏效了) 博客分类: Web前端-JS语言核心 JavaScript 作者:zccst typeof认为所有的复合数据类型都是"object",没法进一步细分,所以还得用其他方法 先上结论...

    作者:zccst

    typeof认为所有的复合数据类型都是"object",没法进一步细分,所以还得用其他方法

    先上结论:

    1,(arr && typeof(arr) === "object" && arr.constructor === Array)

    2,Object.prototype.toString.call(arr);

    Js代码   收藏代码
    1. Object.prototype.toString.call([]);  
    2. //"[object Array]"  
    3. Object.prototype.toString.call({});  
    4. //"[object Object]"  



    例子:

    Js代码   收藏代码
    1. var arr = [];  
    2. arr['name'] = "helios";  
    3. arr['version'] = 'trunk';  
    4. console.log(arr, typeof arr);  
    5. console.dir(arr);//信息比较全面  
    6. $.each(arr, function(key, item){//没有进入循环,是因为length=0  
    7.     console.log(key, item, item[key]);  
    8. });  
    9. console.log( Object.prototype.toString.call(arr) );  
    10. console.log( arr.constructor , arr.constructor === Array);  
    11. console.log(arr && typeof(arr) === "object" && arr.constructor === Array);  



    打印:
    [name: "helios", version: "trunk"] "object"
    Array[0]
      length: 0
      name: "helios"
      version: "trunk"
      __proto__: Array[0]
    [object Array]
    function Array() { [native code] } true
    true

    批注:
    1,arr还是数组。只不过length=0,同时绑定了两个静态变量。jQuery不循环这类数据。

    2,typeof只是用来判断基本数据类型的。复合数据类型typeof判断出都是"object"

    3,instanceof也不奏效,因为他们是继承关系。

    Js代码   收藏代码
      1. var arr = [];  
      2. arr['name'] = "helios";  
      3. arr['version'] = 'trunk';  
      4. console.log( arr instanceof Array );  //true  
      5. console.log( arr instanceof Object ); //true 

    转载于:https://www.cnblogs.com/shsgl/p/4289937.html

    展开全文
  • 复合数据类型叫对象,这个对象不是女朋友,也不是男朋友哈。

    复合数据类型叫对象,这个对象不是女朋友,也不是男朋友哈。

    对象  Object

    格式: 由简单数据类型与复合数据类型,任意组合而成的,它的数据是放在一对大括号当中。每个数据是由一个键值对组合而成的,数据可以是0个,也可以是多个,每个数据之间用逗号隔开,最后一个数据不能加逗号(如果加了逗号,那就会报错)。

    什么是键值对?


    键值对: key : value 

    key代表数据名称 ,它可以加引号,也可以不加,当这个名字不符合命名规则的时候需要加上引号   (数字除外 , 只是变量不能以数字开头),引号是成对出现。

    value  数据对应的值,这个值可以是简单数据类型,也可以是复杂数据类型。


    操作对象用的方法就是属性操作的方法。


    举个例子

    var person = {
    		name : '比尔盖茨',
    		age : 30,
    		height : '178cm',
    		weight : '80kg',
    		drive : true,
    		'girl-firend' : null,
    		language : ['汉语','日语','英语']
    };
    	//上面就组成了一个对象的数据
    			
    console.dir(person);  //▶Object
    console.log(person.name); // 比尔盖茨
    console.log(person.['girl-firend']) //null
    person.age = 25;
    console.log(person.age);  //25
    


    Pritce :

    1、什么是对象?

    2、键值对是如何表现的?

    3、键值对能否用数字来命名?

    4、对象用什么办法来操作呢?

    展开全文
  • JAVA的简单数据类型和复合数据类型

    千次阅读 2013-05-01 20:31:14
    Java的简单数据类型 数据类型 数据类型就是对内存位置的抽象表达。程序员可以利用多种数据类型:某些由编程语言定义,某些由外部库定义,还有些则由程序员来定义。很多编程语言都依赖于特定的计算机类型和对...

    Java的简单数据类型


    数据类型

    数据类型就是对内存位置的抽象表达。程序员可以利用多种数据类型:某些由编程语言定义,某些由外部库定义,还有些则由程序员来定义。很多编程语言都依赖于特定的计算机类型和对数据类型属性的具体编译实现,比如word和integer数据类型的大小等。另一方面,Java的虚拟机负责定义其内置数据类型的各方面内容。这就意味着不管Java虚拟机(JVM)运行在何等低级的操作系统之上,数据类型的属性都是完全一样的。
    简单数据类型
    简单数据类型是不能再简化的、内置的数据类型,由编程语言定义,表示真实的数字、字符和整数。更大、更复杂的数据类型可以采用简单数据类型的组合来定义。在大多数情况下,简单数据类型都具有其硬件等价物。比方说,int简单类型有时存放在32位硬件寄存器内。Java提供了几类简单数据类型表示数字和字符。
    简单数据类型通常划分为以下几种类别:实数、整数、字符和布尔值。这些类别中又包含了多种简单类型。比如说,Java定义了两种简单类型:float和 double,它们都属于实数类别,另外4种简单类型:byte、short、int和long则都属于整数类别。此外还有一种简单类型char则归于字符类型。布尔值类别只有一种简单类型:boolean。表A详细列出了Java的简单数据类型.

    表A Java简单数据类型
    简单类型 大小 范围/精度 
    float 4 字节 32位IEEE 754单精度 
    double 8 字节 64位IEEE 754双精度 
    byte 1字节 -128到127 
    short 2 字节 -32,768到32,767 
    int 4 字节 -2,147,483,648到2,147,483,647 
    long 8 字节 -9,223,372,036,854,775,808到9,223,372,036, 854,775,807 
    char 2 字节 整个Unicode字符集 
    boolean 1 位 True或者false 
    Java的简单数据类型
    Java中的所有数字变量都是有符号的,Java不允许数据类型之间随意的转换。只有数字变量之间可以进行类型转换。比如,boolean就不能转换为其他数据类型,而且其他数据类型也不能转换为boolean。
    因为Java的简单数据类型都经过准确定义,而且直接内存访问也是不允许的,所以在Java语言中取消了sizeof运算符。
    Java的简单数据类型并不是对象。为了采用面向对象方式对待Java简单数据类型,你需要首先用类封装它们。
    封装类
    Java 还提供了Byte、Short、Boolean、Character、Integer、Double、Float和Long等内置的封装类。这些封装(wrapper)类提供了很直观的实用方法。比如,Byte、Float, Integer、Long和Double类都具有doubleValue()方法,通过它可以把存储在类的实例中的值转换为Double类型。还有,所有的封装类都提供了静态的valueOf(String s)方法把给定的String转换为对应的简单类型。清单A的代码演示了这些封装类的一些用法。
    简单数据类型初始化
    在 Java语言中,简单数据类型作为类的成员变量声明时自动初始化为默认值,除非显式地声明。简单数据类型为某一方法声明局部变量时不会自动地初始化而且会导致编译器扔出类似以下的错误消息“Variable x may not have been initialized.(x变量没有初始化)”表B定义了Java简单数据类型的默认值。
    表B Java简单数据类型的默认值
    类型
    默认值
    boolean:false

    Byte: 0

    short:0

    int:0

    Long:0

    Char:′u0000′

    Float:0.0

    double:0.0
    Java简单数据类型的默认初始值
    清单B 中的代码显示所有的Java简单数据类型都用做了Initialization类的成员变量。该例还显示Initialization类的构造器中局部声明了一个int变量。在不修改以上代码的情况下,编译器会在对以上代码进行编译的时候扔出错误。
    一旦引发问题的代码行(那些引用未初始化变量导致错误发生的代码)被删除或者注释掉。程序成功编译和执行之后就会显示以下的结果:
    byte: 0
    short: 0
    int: 0
    long: 0
    float: 0.0
    double: 0.0
    char: 0
    boolean: false
    我们还可以显式地初始化成员变量为其他值,如以下代码所示:
    byte b = 5;
    short s = 123;
    int i = 1234;
    long l = 12345;
    float f = 123.45f;
    double d = 12345.678;
    char c = ′A′;
    boolean z = true;
    小结

    Java定义了全套简单数据类型。此外,Java取消了其他变成语言中的硬件和编译器依附,允许程序员把注意力转移到其他问题上来。在下一篇文章里,我们将继续讨论某些经常用到的、Java定义的复杂数据类型,同时了解下如何利用它们来处理典型的编程问题。


    Java的复杂数据类型
    索引
    同简单数据类型的定义一样,Java虚拟机(JVM)还定义了索引(reference)这种数据类型。索引类型可以“引用”变量,由于Java没有明确地定义指针类型,所以索引类型可以被认为就是指向实际值或者指向变量所代表的实际值的指针。一个对象可以被多于一个以上的索引所“指”。JVM从不直接对对象寻址而是操作对象的索引。
    索引类型分成三种,它们是:类(class)、接口(interface)和数组(array)。索引类型可以引用动态创建的类实例、普通实例和数组。索引还可以包含特殊的值,这就是null 索引。null 索引在运行时上并没有对应的类型,但它可以被转换为任何类型。索引类型的默认值就是null。

    类(Class)指的是定义方法和数据的数据类型。从内部来看,JVM通常把class类型对象实现为指向方法和数据的一套指针。定义class类型的变量只能引用类的实例或者null ,如以下代码所示:
    MyObject anObject = new MyObject(); // 合法
    MyObject anotherObject = null; // 合法
    MyObject stillAnotherObject = 0; // 非法
    接口
    接口(interface)好比一种模版,这种模版定义了对象必须实现的方法,其目的就是让这些方法可以作为接口实例被引用。接口不能被实例化。类可以实现多个接口并且通过这些实现的接口被索引。接口变量只能索引实现该接口的类的实例。比方说,假设我们定义了一个接口,名字是Comparable ,同时还定义了一个类SortItem,这个类实现了接口Comparable,那么我们可以编写以下的定义代码:
    Comparable c = new SortItem();
    假如Comparable 接口定义了一个方法: public void compare(Comparable item), 那么SortItem 类就必须提供compare 方法的实现,如以下代码所示:
    public class SortItem implements Comparable
    {
    public void compare(Comparable item)
    {
    ...method implementation here
    }}
    数组
    Java数组(array)是动态创建的索引对象,这一点和类非常相似,此外,同类一样,数组只能索引数组的实例或者null ,如以下代码所示:
    int[] myIntArray = new int[5];
    int[] anotherIntArray = null;
    数组是Object类的继承,这样,Object类的所有方法都可以被数组调用。数组对象由元素组成。元素的数目也可以为0,在这种情况下称做数组为空。所有的数组都是从0开始对元素编号的,这意味着数组内的第1个元素的索引编号是数字0。所有对数组元素的访问都会在运行时上接受检查,如果试图使用编号小于 0或者大于数组长度来索引元素就会产生ArrayIndexOutOfBoundsException异常并被扔出。
    数组的元素按整型值索引,如以下代码所示:
    int[] myIntArray = { 9, 5, 6 };
    int int1 = myIntArray[0];
    int int2 = myIntArray[1];
    int int3 = myIntArray[2];
    数组对象的长度是不变的。为了改变数组变量的长度,你必须创建另一个数组并赋给变量,如以下代码所示:
    int[] myIntArray = { 9, 5, 6 };
    System.out.println("myIntArray length = " +myIntArray.length); // 输出结果是3
    myIntArray = new int[] { 3, 6, 4, 2, 8 };
    System.out.println("myIntArray length = " +myIntArray.length); // 输出结果是5
    复合数据类型
    Java语言不支持结构(struct)或联合(union)数据类型。它的复合数据类型是通过类或者接口来构造的,类提供了捆绑数据和方法的方式,同时可以限制对类的私有数据的访问。比如说,如果用C语言,那么汽车(car)就可以如下代码所示用结构来定义:
    struct Car
    {
    char* model;
    char* make;
    int year;
    Engine* engine;
    Body* body;
    Tire** tires; 
    }
    以上的示范代码还隐含采用了先前定义的引擎(Engine)、车身(Body)和轮胎(Tire)结构。而采用Java语言,汽车的定义如清单A所示。
    以上的示例还假设我们以前都已经定义过CarModels和CarMakes接口以及Engine、Body、Tire、DurangoEngine、DurangoBody和GoodyearTire类。

    复合数据类型的初始化

    复合数据类型由构造器内定义的代码实现初始化,构造器在类的创建函数(比如“new”之类)应用到类变量的时候被调用。构造器被调用之前,类的各个成员被初始化为各自的默认值或者显式赋予的初值。清单B 中的程序代码对以上过程进行了解释。
    在清单B的代码中,当myClass 的实例用new 运算符创建时,构造器public MyClass()即被调用促使类对自身初始化。初始化的过程如下所示:
    声明“int myInt;”给myInt赋默认值0。 
    声明“AnotherClass anotherClass;”给anotherClass分配默认值null。 
    构造器内的声明“myint = 2;”给myInt赋值为2。 
    预定义复合数据类型
    Java 语言包含了大量的预定义复合数据类型。其中之一的String 类属于java.lang 包。String 类提供的方法执行常用的字符串操作,比如length()、 substring(int beginIndex)、toUpperCase()、toLowerCase()、equals() 等等。另一种常用的Java复合数据类型是Vector 类,它属于java.util 包。Vector 类定义的方法执行可扩展对象数组的常用操作。比如add(int index, Object element)、elementAt(int index)、isEmpty()和remove(int index)等。这些就是一小部分预定义复合数据类型的代表示例。在以后的文章里我们还会进一步对预定义复合数据类型进行讨论。

    小结

    除了简单数据类型之外,Java语言中还定义了本文所讨论三种索引数据类型。Java还运行开发人员自己用简单和索引数据类型组合起来创建复合数据类型。用户定义的组合数据类型和Java预定义复合数据类型一道为程序员提供了强大的面向对象工具包。在接下来的文章里,我们会进一步详细地讨论大多数常用的复杂数据类型及其可用操作。我们会首先从Java所特有的集合框架讲起。

    文章出处:飞诺网(www.diybl.com):http://www.diybl.com/course/4_webprogram/jsp/jsp_js/20090304/157777.html

    展开全文
  • 要了解一门语言,首先要了解它的数据类型有哪些?他们之间有什么关系?能否互相转换等。 目前,JavaScript(下称JS)中有七大数据类型,它们分别是: 1. Boolean 布尔型 2. Null 空 3. Undefined 未定义 4. ...

    要了解一门语言,首先要了解它的数据类型有哪些?他们之间有什么关系?能否互相转换等。

    目前,JavaScript(下称JS)中有七大数据类型,它们分别是:

    1. Boolean         布尔型

    2. Null                空

    3. Undefined     未定义

    4. Number         数字型

    5. String            字符串型

    6. Symbol         符号型

    7. Ojbect           对象

     

    记得在“JS学习篇(一) JavaScript语言特性”中有提到过,JS是一门动态脚本语言,这主要体现在JS的变量可以是变化的,而不是固定的:

    var foo = 42;    // foo是一个Number
    foo = "bar"; // 现在foo是一个String
    foo = true;  // 现在foo是一个Boolean

     

    下面将展开各类型的介绍:

    布尔型Boolean

    布尔类型只有两个值:true和false,它们分别代表逻辑上的真与假,真代表true,假代表false,它们通常用在逻辑语句的判断上。

    空Null

    Null类型只有一个值:null ,它代表变量值为空(注意与下面的未定义Undefined区分),通常表示变量未指向任何值或者对象。在API调用过程中null常在返回类型是对象,但没关联值的地方使用。

    未定义Undefined

    Undefined类型只有一个值:undefined,未被初始化的变量都有默认值undefined,undefined既是一个类型也是一个值,undefined值是undefined类型的唯一值。

    undefined与null有区别,首先在概念上已经划分了这是两种类型,那么undefined强调的是变量未初始化,而null则代表变量有值,只是这是一个空值。在JS解释器中执行下面代码:

    // foo不存在,它从来没有被定义过或者是初始化过:
    foo;
    "ReferenceError: foo is not defined"
    
    // foo现在已经是知存在的,但是它没有类型或者是值:
    var foo = null; 
    foo;
    null

    可以看到一开始就运行"foo;'"去访问foo的值得到错误提示“ReferenceError: foo is not defined”,代表foo未定义;而后面通过“var foo = null;”定义了foo并赋值,此刻foo是有值的,这个值就是null(代表空值)。

    另外,null是一个字面量(就是一个值表示),它类似于“hello”或者42这样一个字符串或者数字字面量,只是它代表是一个空(什么都没)的值。而undefined是JS环境中全局对象的一个属性,也就是说它是一个全局变量,里面存着一个undefined的值。

    上面说的比较复杂拗口,可能用实际代码来演示比较直接,这里用==和===操作符来演示,可以在JS解释器中执行以下代码以查看结果:

    typeof null        // "object" (因为一些以前的原因而不是'null')
    typeof undefined   // "undefined"
    null === undefined // false
    null  == undefined // true
    null === null // true
    null == null // true
    !null //true
    isNaN(1 + null) // false
    isNaN(1 + undefined) // true

    可以看到其中一条比较特别的“null == undefined”返回结果是true,因为使用普通相等操作符==来比较两者,null会进行类型转换,使其等于undefined。而使用严格相等操作符===来比较两者,null不会进行转型,那么两者的值是不相等的,所以返回结果是false,所以如果要判断一个变量的值是否为undefined或者null,应该使用严格相等===或者严格不相等!==操作符来进行比较。

    数字型Number

    在JS中,所有数字都是number这种类型,不论这个数字是整数还是浮点数。这种数字类型是基于IEEE754标准所定义的双精度64位二进制数,范围是-(2^63 -1) 到 2^63 -1,这并没有为整数设立单独的类型。除了一般浮点数和整数外,还有+Infinity-Infinity来表示正无穷和负无穷,最后还有一个特殊值NaN(Not-a-Number)表示非数字。

    像上面的代码段中最后两行使用了isNaN方法来测试一个表达式或者参数是否一个非数字类型,isNaN(NaN)的结果为true,其他所有的数字(或者说可以转换为数字的值)都为false,而其他所有不可以转换为数字的值则为true。而这里isNaN(1+null)的结果为false,表示1+null为数字,事实上在JS中1+""或者1+false、1+true的结果都是数字,其中null、空字符串""和false都可以进行类型转换为0,而true转换为1。最后,1+undefined中,undefined不能转换为数字,所以isNaN结果为true。

    最后特别地声明,NaN是唯一一个不能自己等于自己的值,也就是NaN !== NaN的值为true,所以还可以利用这一点来判断一个变量是否为NaN,:

    if(x !== x){
    
        //x是NaN,执行这里的代码
    
    }else{
    
        //x不是NaN,执行这里的代码
    
    }

    上面这种判断方式在ES6中被封装为Number.isNaN方法(与全局方法isNaN区分)。

    相对的,isNaN这个方法只能用来判断一个变量能否被Number()类型转换为数字类型,如果能就返回false,不能则返回true。

    字符串型String

    JS中的字符串类型用来表示文本数据,它由一组16位的无符号整数所组成,其中每个整数表示一个字符。字符串可以是1个或多个的字符组成,包括特殊字符、空格等。不同于C、C++语言,JS中的字符串虽然可以通过下标和索引访问其中的单个字符,但却不能通过这种方式来改变字符串中某个字符的值。字符串是一个不可修改的原始值,要改变字符串变量的字符串值,只能通过重新赋值:

    var a = "Hello";
    
    console.log(a[0]);  //输出:H
    
    a[0] = "X";   //无效的赋值
    
    console.log(a[0]);  //同样输出:H
    
    a = "World";  //重新赋值
    
    console.log(a[0]); //输出:W

    符号型Symbol

    符号是ECMAScript第6版新定义的类型。符号类型的值是唯一的并且是不可修改的, 并且也可以用来作为Object的key的值(如下). 在某些语言当中也有类似的原子类型(Atoms). 也可以认为它们是C语言里面的枚举类型。在JS中,符号型值主要用来作为对象属性的标识符,这种符号型的标识符与字符串、数字作为属性的标识符永远不会冲突。这种新类型由于使用得较少,目前暂时不作展开讨论,日后再补充。

    对象Object

    在JS中,对象是一组属性的集合。每个属性由一个键值对组成,属性使用键来标识,键可以是字符串或者Symbol,而属性值可以是任意类型,包括对象类型!没错,一个对象就是复合类型的数据结构,它可以包含字符串、数字、布尔类型,也可以包含其他对象(包括函数也是对象)作为它的属性值。

    一个最简单的对象可以是这样:

    var person = {};

    上面这是一个空对象,下面可以给它加一些数据属性:

    var person = {
        name: "Tom",
        age: 24
    };

    好,再来说说对象包含的两类属性:数据属性访问器属性

    数据属性是键值对,每个数据属性拥有以下特性:

    特性数据类型描述默认值
    [[Value]]任何Javascript类型包含这个属性的数据值。undefined
    [[Writable]]Boolean如果该值为 false,则该属性的 [[Value]] 特性 不能被改变。true
    [[Enumerable]]Boolean如果该值为 true,则该属性可以用 for...in 循环来枚举。true
    [[Configurable]]Boolean如果该值为 false,则该属性不能被删除,并且 除了 [[Value]] 和 [[Writable]] 以外的特性都不能被改变。true

    访问器属性,一般是指用来访问和设置对象属性的两个函数(get和set),并有以下特性:

    特性类型描述默认值
    [[Get]]函数对象或者 undefined该函数使用一个空的参数列表,能够在有权访问的情况下读取属性值。另见 getundefined
    [[Set]]函数对象或者 undefined该函数有一个参数,用来写入属性值,另见 setundefined
    [[Enumerable]]Boolean如果该值为 true,则该属性可以用 for...in 循环来枚举。true
    [[Configurable]]Boolean如果该值为 false,则该属性不能被删除,并且不能被转变成一个数据属性。true

    上面这些特性只有 JavaScript 引擎才用到,因此不能直接访问它们。所以特性被放在两对方括号中,而不是一对。但可以通过全局静态方法Object.getOwnPropertyDescriptor()来获取它们的特性值:

    另外,get和set是一对访问器属性,可以让一个函数像普通属性那样存取对象数据:

    同样的,可以通过Object.getOwnPropertyDescriptor()来获取访问器属性的特性值:

    在JS中有很多预定义好的对象,这种对象可以直接在JS中使用,包括常接触的Array、Function、JSON等,这也叫标准内建对象。值得一提的是,JS中的函数其实也是对象。

     

    回头一看,记得在这小节刚开始有说过,JS对象类型是一种复合的数据结构,除了可以包含各种类型键值对的数据外,它与上面其它几种数据类型有关键性的区别,还要提到一个概念: 值类型和引用类型。

    上面的七大数据类型还可以分为值类型引用类型

    值类型:boolean、null、undefined、number、string、symbol

    引用类型:object

    (有没有注意到上面写的类型描述都是全小写,这跟typeof有关,下面会讲)

    下面拿值类型中的number与object作一个对比:

    var num1 = 1;
    var num2 = num1;
    console.log(num1) // 输出1
    console.log(num2) // 输出1
    
    num1 = 2;                 //给num1赋值1
    console.log(num1) // 2   //num1已经修改,输出2
    console.log(num2) // 1   //num2未被修改,输出仍然是1

    可以看到num2不会因为num1的变化而变化。

    下面看看对象ojbect:

    var person1 = {name: "Tom", age: 24};
    var person2 = person1;
    console.log(person1); //输出Object {name: "Tom", age: 24 }
    console.log(person2); //输出Object {name: "Tom", age: 24 }
    
    person1.age = 28;
    console.log(person1); //由于修改了age为28,所以输出Object {name: "Tom", age: 28 }
    console.log(person2); //输出Object {name: "Tom", age: 28 },person2的age也被修改了!

    可以看到person2对象中的age也被修改为28了!

    为什么呢?这就是因为值类型与引用类型在存储数据方面有所不同,看下面图示:

    可以看到num1和num2变量分别存储了两个空间的值,当num1修改值为2后,num2并未受到影响。

    再来看看对象这边:

     关于上图,需要说明的是,person1赋值给person2的其实是引用值,这个引用值一般是内存空间的地址值,这里对开发者是透明的,所以将其理解为引用值1即可。然后右边的两个椭圆分别是同一个内存空间的两个不同时间状态,这块内存空间叫堆内存(这是用来分配对象的空间,可以搜索了解下),上面那个是未修改person属性值前的状态,下面那个是修改了person的age属性后的状态。person1与person2右边所连接的黑色弧线所指向的内存块是实际的对象值,里面含有name和age属性,红色弧线指向的则是修改后的对象。从这里可以看出,无论是用person1还是person2,修改的其实都是同一个对象,因为他们的引用值是一样的!这就是值类型和引用类型的区别所在。

     

    typeof

    最后在这里了解下这个常用的操作符typeof,它可以用来判断一个变量或者值所存储数据的类型并返回一个字符串,下面来看看各种类型数据下typeof可以得出什么样的结果(下面所有逻辑===判断都为true):

    // Numbers
    typeof 37 === 'number';
    typeof 3.14 === 'number';
    typeof Math.LN2 === 'number';
    typeof Infinity === 'number';
    typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写
    typeof Number(1) === 'number'; // 但不要使用这种形式!
    
    // Strings
    typeof "" === 'string';
    typeof "bla" === 'string';
    typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
    typeof String("abc") === 'string'; // 但不要使用这种形式!
    
    // Booleans
    typeof true === 'boolean';
    typeof false === 'boolean';
    typeof Boolean(true) === 'boolean'; // 但不要使用这种形式!
    
    // Symbols
    typeof Symbol() === 'symbol';
    typeof Symbol('foo') === 'symbol';
    typeof Symbol.iterator === 'symbol';
    
    // Undefined
    typeof undefined === 'undefined';
    typeof declaredButUndefinedVariable === 'undefined';
    typeof undeclaredVariable === 'undefined'; 
    
    // Objects
    typeof {a:1} === 'object';
    
    // 使用Array.isArray 或者 Object.prototype.toString.call
    // 区分数组,普通对象
    typeof [1, 2, 4] === 'object';
    
    typeof new Date() === 'object';
    
    // 下面的容易令人迷惑,不要使用!
    typeof new Boolean(true) === 'object';
    typeof new Number(1) === 'object';
    typeof new String("abc") === 'object';
    
    // 函数
    typeof function(){} === 'function';
    typeof class C{} === 'function'
    typeof Math.sin === 'function';
    typeof new Function() === 'function';

    上面的表已经罗列了大部分数据类型typeof的输出结果,但是好像还有些不全,似乎漏了null这个类型?由于历史原因,typeof null的结果是object 。

    typeof null === 'object'; // 从一开始出现JavaScript就是这样的

    另外好像比较奇怪的是,还有function这样的输出结果,表明这是一个函数,记住函数也是对象,用这种方法可以区分一个对象是否为函数。其实不用纠结,以下是完整的输出类型表:

    类型结果
    Undefined"undefined"
    Null"object"
    Boolean"boolean"
    Number"number"
    String"string"
    Symbol (ECMAScript 6 新增)"symbol"
    宿主对象(由JS环境提供)依赖实现而不同
    函数对象([[Call]] 在ECMA-262条款中实现了)"function"
    任何其他对象"object"

    好,上面为目前我所整理的关于JS七种数据类型的笔记,方便日后查询核对,同时如果有理解上的错误或偏差,望指出共同讨论。

    展开全文
  • js复合数据类型

    2018-02-02 15:49:53
    console.log(typeof NaN) number //NaN 是number 里特殊的一  console.log(isNaN(NaN)) true  console.log(NaN == NaN) false  console.log(undefined == undefined) true 在 isNaN 函数里...
  • JavaScript的数据类型以及数据类型的转换基本数据类型字符串型数据数值型数据复合数据类型对象的概念日期对象全局对象数学对象字符串对象数组其他数据类型函数空值不确定型数据类型的转换隐式转换显示转换功能快捷键...
  • js有哪些数据类型

    2020-08-05 14:13:25
    基本数据类型:Number(数字) String(字符串) Boolean:布尔类型(true,false) 特殊数据类型:Null(空) undefined(未定义) 复合数据类型:Object(对象)
  • js数据类型详细

    2016-10-11 20:01:49
    Javascript中的数据类型可以分为基本数据类型和复合数据类型两种: 基础数据类型有5种:Undefined、Null、Boolean、Number和String。 复合数据类型包括:函数(Function)、数组(Array)、Object(对象)。 (1)基础...
  • ECMAScript中将数据类型分为三类:基本数据类型,特殊数据类型复合(引用)数据类型 一、基本数据类型 String:字符串数据类型,放在单引号或者双引号中 Number:数字类型,包括int和float两种 Boolean:布尔...
  • 1、对象对象就是一组 “键值对”(key-value)的集合,是一无序的复合数据集合。var obj = {foo: 'Hello',bar: 'World',100: true,};obj.foo // 'Hello'obj[100] //true 如果键名是数值,会被自动转为字符串...
  • JS数据类型转换小计 数据类型 最新的ECMAScript标准定义了7种数据类型 原始类型 Boolean Null Undefined Number String Symbol 对象 7.Object 显式类型转换 Number函数 原始类型转换 数值:转换后还是原来...
  • JavaScript有三种主要数据类型、两种复合数据类型和两种特殊数据类型。 主要(基本)数据类型是: 字符串 数值 布尔 复合(引用)数据类型是: 对象 数组 特殊数据类型是: Null Undefined 字符串数据类型 一个字符...
  • JavaScript中的六原始数据类型 number:整数或小数 boolean:布尔类型(true,false) null:空类型,值只有一个即null (但是使用typeof获取值为null的变量的类型得到的结果是object,因为是空对象) string:单...
  • JavaScript数据类型

    2021-01-12 21:09:28
    复合数据类型复合数据类型主要用来保存一组相同或不同数据类型数据的数组;用来保存一段可在JavaScript中反复被调用的函数;用来保存一组不同的类型的数据和函数等对象。 特殊数据类型:特殊数据类型主要包括没有...
  • Go复合数据类型

    千次阅读 2018-08-09 21:13:21
    数据和结构体都是聚合类型,它们的值是由内存中其他的值来组成的。 数组是同构类型的—每个数组中的元素都是一致的类型 结构体是异构类型的 数组和结构体都是具有固定内存大小的数据结构 切片和map则是动态的...
  • Javascript 数据类型

    2017-04-24 20:31:14
    Javascript中的数据类型可以分为以下三类: 基本数据类型:字符串型(string,用于存取文本)、数字型...Javascript中的复合数据类型包括数据(Array)和对象(Object)两种。其他数据类型:包括函数(Function)
  • JavaScript数据类型: 编程语言的最根本的特征之一是一组它支持的...除了这些基本的数据类型,JavaScript支持被称为对象的复合数据类型。我们会看到在一个单独的章节介绍对象细节。 注:Java不作整数和浮点值之间的区
  • JavaScript复合类型

    2020-02-04 21:15:20
    JavaScript中的引用数据类型JavaScript有如下常用的内置类: 1、 Array: 数组类 2、Date: 日期类。 3、 Error: 错误类。 4、 Function: 函数类。 5、 Math: 数学类,该对象包含相当多的执行数学运...
  • JS数据类型详解

    2018-01-19 14:31:16
    JS数据类型通常分为三个类型即:主数据类型、复合数据类型以及特定数据类型。主(基元)数据类型主要分三: 字符串String,如:“张三”“李四”“王五”“123abc”等等, 数字Number,如:1 3 5 7 100 等等, ...
  • JavaScript中的复合类型

    千次阅读 2018-07-15 15:18:32
    复合类型是由许多基本数据类型(也可以包括基本数据类型)组成的数据题,JavaScript中的复合类型大致上分为如下3:Object类:对象 Array:数组 Function:函数对象对象是一系列命名变量,函数的集合,其中变量的...
  • javascript数据类型

    2013-11-25 14:59:00
     Jscript 三种主要数据类型、两种复合数据类型和两种特殊数据类型。  主要(基本)数据类型是:  字符串  数值  布尔  复合(引用)数据类型是:  对象  数组  特殊数据类型是:  Null  ...
  • JavaScript 数据类型

    2012-02-09 14:28:59
    Jscript 三种主要数据类型、两种复合数据类型和两种特殊数据类型。  主要(基本)数据类型是:  字符串  数值  布尔  复合(引用)数据类型是:  对象  数组  特殊数据类型是:  Null ...
  • JS数据类型

    2013-01-03 14:06:34
    Javascript中的数据类型可以分为基本数据类型和复合数据类型两种:基础数据类型有5种数据类型:Undefined、Null、Boolean、Number和String。 复合数据类型包括以下几种:[*]function 函数类型[*]object 对象类型,...
  • JavaScript基本数据类型

    2020-05-13 06:51:37
    JavaScript数据类型分为两种: 简单的值(原始值):包含字符串、数字和布尔值,此外,还有两个特殊值——null(空值)和 undefined(为定义)。 复杂的数据结构(泛指对象):包括狭义的对象、数组和函数。 ...
  • js数据类型

    2018-06-20 08:58:08
    JavaScript数据类型 六种类型(常用划分) 字符串、数字、布尔值、对象、undefined、null 对象会包含:数组、函数这两种类型 八种类型 字符串、数字、布尔值、对象、数组、函数、undefined、null 还有一种...
  • Go语言中种复合数据类型:数组,slice,map,结构体 数组和结构体都是聚合类型,长度固定。而slice和map都是动态数据结构,长度可变。 1. 数组 var arrName [len]T arrName := [...]int{1, 2, 3} arrName是数组...
  • JS有哪些数据类型

    2019-07-06 09:30:47
    这里是修真院前端小课堂,每篇分享文从 八个方面深度解析前端知识/技能,本篇分享的是: 【JS有哪些数据类型?】 大家好,我是IT修真院武汉分院web...JS有两种数据类型 1.简单数据类型(也称基本数据类型):Unde...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 16,061
精华内容 6,424
关键字:

js有两种复合数据类型