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-------------------------------

    ○延伸两句○

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

  • 相关阅读:
    Android(java)学习笔记68:使用proguard混淆android代码
    SGU 194 Reactor Cooling
    关于流量有上下界的网络流问题的求解
    关于最小割的求解方法
    HDU 5311 Hidden String
    POJ 3548 Restoring the digits
    POJ 2062 HDU 1528 ZOJ 2223 Card Game Cheater
    ZOJ 1967 POJ 2570 Fiber Network
    HDU 1969 Pie
    HDU 1956 POJ 1637 Sightseeing tour
  • 原文地址:https://www.cnblogs.com/MaiJiangDou/p/14860053.html
Copyright © 2011-2022 走看看