zoukankan      html  css  js  c++  java
  • 前端基础——js数据类型及判断方法

    一、数据类型

      我们通常熟知的数据类型有六种,包括5种基本数据类型(Number, String, Boolean, Undefined, Null)和一种引用数据类型(Object)。ES6又新增了一个基本数据类型Symbol,所以现在应该是七种数据类型。

      注:有些地方会把引用类型分为对象(Object)、数组(Array)、函数(Function)三种,还有博客中提到了chrome 67中的新功能BigInt类型,我这里暂时不算进去。

    1、Number

    数字类型,包括整数和浮点数。

    有一个特殊的值NaN,即非数值。js 规定NaN不等于NaN,可以 isNaN() 来检测是否是非数值型

    2、String

    字符串类型,单双引号都行。

    3、Boolean

    布尔类型,只有两个值,true和false。

    4、Undefined

    声明了变量,但是没有初始化,则这个变量的类型就是undefined,且其默认初始化值为undefined。

    5、Null

    null类型的默认值是null,从逻辑角度讲,是表示一个空对象指针。

    区分undefined和null——当一个变量声明后,未初始化,则该值为undefined;如果这个值是为了保存对象,则修改默认初始化值为null。 所以当检测其类型时,会显示类型为object。

    6、Object(Data、Function、Array等)

    该类型实例化的对象,是一组数据和功能(函数)的集合。

    实例化对象的过程有两种,一种是通过new操作符,一种是通过对象字面量表示法。

    Array()、Date()、function()类型,都是从object继承的。

    7、Symbol(ES6 新增)

    Symbol 类型本质上是一种唯一标识符,可用作对象的唯一属性名。

    唯一性

    Symbol 类型的对象永远不相等,即使是用同一个变量生成的值也不相等。

    隐藏性

    for···in,object.keys() 不能访问,可以用专门针对Symbol的方法来获取。

     

    Symbol 类型的一些应用和参考

    https://www.cnblogs.com/linziwei/p/10818101.html

    https://blog.csdn.net/qq_33408245/article/details/82953143

    二、判断方法

    1、typeof

    typeof可以区分一部分数据类型,结果如下:

    typeof   123   //Number
    
    typeof   'abc'  //String
    
    typeof    true       //Boolean
    
    typeof    undefined   //Undefined

    typeof Symbol() //Symbol

    typeof
    null //Object

    typeof { } //Object

    typeof [ ] //Object

    typeof console.log() //Function

    2、判断null、object和array

    从上面的结果可以看出,用typeof检测 null、数组、对象的结果都是Object,所以需要用其他方法区分他们的类型。

    判断null

      可以用===null来判断。

    判断object和array

    ① isArray

    Array.isArray([])  //true
    Array.isArray({})  //false

    ② instanceof

    [] instanceof Array   //true
    {} instanceof Array   //false

    ③ constructor

    {}.constructor    //返回object
    [].constructor    //返回Array

    ④ Object.prototype.toString.call

    Object.prototype.toString.call([])   //["object Array"]
    Object.prototype.toString.call({})   //["object Object"]

    END-------------------------------

    ○延伸两句○

    深拷贝:修改新变量的值不会影响原有变量的值。默认情况下基本数据类型都是深拷贝。
    浅拷贝:修改新变量的值会影响原有的变量的值。默认情况下引用类型都是浅拷贝。

  • 相关阅读:
    常用并发类
    线程基本知识
    java多线程基础
    volatile原理小结
    condition学习小结
    阻塞队列、线程池、异步
    Synchronized原理
    wait 和notify
    【Java 8 新特性】Java Comparator.comparing | 提取对象属性,按照指定规则排序
    在Centos8上配置Minio服务使用TLS
  • 原文地址:https://www.cnblogs.com/MaiJiangDou/p/14860053.html
Copyright © 2011-2022 走看看