前言

最新的 ECMAScript 标准定义了JS的 7 种数据类型,其中包括:

6 种基本类型:Boolean、Null、Undefined、Number、String、Symbol (ECMAScript 6 新定义);

1个引用类型: Object(包含狭义的对象,Array,function)。

本文主要介绍一下7种数据类型介绍数据类型转换数据类型判断

目录

  1. JavaScript七种数据类型(Boolean、Null、Undefined、Number、String、Symbol、Object)
  2. JavaScript数据类型转换(任意类型转字符串,任意类型转数字,任意类型转布尔)
  3. JavaScript数据类型判断(Typeof()、instanceof、Object.prototype.toString.call()、constructor

正文

1 JavaScript七种数据类型

  • Boolean

    • Bealean类型的值有两个:true、false

    • 所有其他数据类型都有对应的Boolean值,使用Boolean(value)方法可以强制转换任意值为boolean类型
      console.log(Boolean("Hello")); //true
  • Null

    • Null类型的值只有一个:null

    • Typeof(null)时返回“object”:这是历史原因造成的,但是可以理解成:unll表示一个空对象(Object)的引用
      typeof(null); // "object"
  • Undefined

    • undefined类型的值只有一个:undefined

    • 只进行了声明而未初始化的变量,其值都是undefined
      var m;
      console.log(m); //undefined
    • undefined值派生自null值,两者都是表示“没有值”。两者相等,但是由于数据类型不一样,两者不全等(==是相等操作符会对数据类型进行转化,===是全等操作符不会转化数据类型)
    • console.log(undefined == null); //true 
      console.log(undefined === null); //false
    • 如何区分undefined和null:表示一个还没赋值的对象用null;表示一个还没赋值的字符串、数字、布尔、symbol时用undefined
  • Number

    • number包括:整数和小数(如:1/1.1)、科学计数法(如:1.11e2)、二进制(如:0b11)、八进制(如:11或0o11)、十六进制(如:0x11)
    • 保存浮点数所需的内存空间是整数值的2倍
    • 浮点数值相加结果会不准确
      console.log(0.1+0.2);    //0.30000000000000004
    • NaN是一个特殊的Number值;它的存在是为了避免程序直接报错;NaN的任何操作都会返回NaN;NaN与任何值都不相等,包括它自身
      console.log(NaN === NaN);  //false;
  • String

    • 字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列。
    • 用单引号(' ')或双引号(" ")皆可,但是必须双引号配双引号,单引号配单引号
    • 任何字符串的长度都是可以通过length属性来取得
      var a="nihao";
      console.log(a.length);
      //
    • ECMAScript中字符串是不可变,如要改变该变量保存的字符串,首先要销毁原来的字符串,再用另一个包含新值的字符串填充该变量
    • symbol是基本类型,实现唯一标识  
    • 通过调用symbol(name)创建symbol  name
    • 我们创建一个字段,仅为知道对应symbol的人能访问,使用symbol很有用  
    • symbol不会出现在for..in结果中  
    • 使用symbol(name)创建的symbol,总是不同,即使name相同。如果希望相同名称的symbol相等,则使用全局注册  
    • symbol.for(name)返回给定名称的全局symbol,多次调用返回相同symbol  
    • Javascript有系统symbol,通过Symbol.*访问。我们能使用他们去修改一些内置行为
  • Object

    • 对象由 { } 分隔,在 { } 内部,对象的属性以名称和值对的形式 (name : value) 来定义,属性由逗号分隔 

      var cars={
      "car1" : "Volvo",
      "car2": "Saab",
      };
      //或者
      var cars={
      car1 : "Volvo",
      car2: "Saab",
      };

       

    • 寻找对象中的值有两种方式:
      car1name=cars.car1;
      car1name =cars["car1"];
    • 数组(Array)和函数(Function)是高级的对象
    • 注意⚠️:基本类型和引用类型的区别:
      • 基本类型:访问是按值访问值不可变,基本类型的比较是值的比较,数据是存放在栈内存中的
      • 引用类型:拥有属性和方法且值是可变的,引用类型的比较是引用的比较,数据是存放在堆内存中的

2 JavaScript数据类型转换

  • 任意转字符串

    • String(thing)   (thing:任何可以被转换成字符串的值)

      String()    //"1"
      String(true) //"true"
      String(null) //"null"
      String(undefined) //"undefined"
      String({}) //"[object Object]"

      注意⚠️:当字符串中的数字为其他进制时,会自动转化为十进制,再把十进制转化为字符串,如:

      String(0b1100)  //"12"   二进制转化为十进制
      String() //"576" 八进制转化为十进制
      String(0o1100) //"576" 八进制转化为十进制
      String(0x1100) //"4352" 十六进制转化为十进制
    • thing.toString()
      .toString()  //Uncaught SyntaxError: Invalid or unexpected token
      ..toString() //"1"
      ().toString() //"1"
      true.toString() //"true"
      null.toString() //VM285:1 Uncaught TypeError: Cannot read property 'toString' of null at <anonymous>::
      undefined.toString() //VM283:1 Uncaught TypeError: Cannot read property 'toString' of undefined at <anonymous>::
      {}.toString() //"[object Object]"
    • thing + ""
       + ""   //"1"
      true + "" //"true"
      null + "" //"null"
      undefined + "" //"undefined"
      {} + "" //
      var o={} //undefined
      o + "" //"[object Object]"
  • 任意转数字  

    • Number(value)

      Number(true) //1     布尔转为数字
      Number(false) //0 布尔转为数字
      Number(null) //0 null转为数字
      Number(undefined) //NaN undefined转为数字,结果为NaN
      Number("") //123 字符串转为数字
      Number(" ") //0 有空格的空字符串为0
      Number("") //0 为空格的空字符串为0
      Number("123a") //NaN number转数字的字符串中不能有字母,parseFloat以及parseInt的中间可以有字母,但是开头不能有
      Number("true") //NaN
      Number("false") //NaN
    • parseInt(string, radix) MDN
      //⚠️string必须是一个字符串
      //⚠️如果不是字符串而是一串数字(注意不能是数字+字母的格式),系统会自动把数字转为字符串,parseInt(01100)相当于是parseInt(String(01100)),由于01100是0开头,是一个八进制,String(01100)会把进制度转化为十进制再转为字符串,即相当于是parseInt("576")
      parseInt("", ) //1100
      parseInt() //576
      parseInt("", ) //576 8的意思是:我字符串中的值是八进制的,请把它转化为十进制 //⚠️但是0x开头(即十六进制)的除外
      parseInt("0b1100") //0 二进制返回0,到字母b处即无法识别数字
      parseInt("0o1100") //0 八进制返回0,到字母o处即无法识别数字
      parseInt("0x1100") //4352 括号里的是字符串。十六进制返回对应的十进制
      parseInt(0x1100) //4352 括号里的不是字符串。十六进制返回对应的十进制
      • string:必需。要被解析的字符串。
      • radix:可选。表示要解析的数字的基数。该值介于 2 ~ 36 之间,如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数,如果该参数小于 2 或者大于 36,则 parseInt() 将返回 NaN。  
      • 注意⚠️:radix参数为n 将会把第一个参数看作是一个数的n进制表示,而返回的值则是十进制的
    • parseFloat(string) MDN

      parseFloat("1.11")  //1.11       字符串中是数字(0-9)以及小数点
      parseFloat(".1.11") //0.1 如果首字符是.则会自动shi
      parseFloat("0.0111e2") //1.11 字符串中是科学计数法(e/E)
      parseFloat("+1.11") //1.11 字符串中有+
      parseFloat("-1.11") //-1.11 字符串中有-
      parseFloat("1.11more") //1.11 字符串中如果有除 小数点、+/-、数字、e/E 的字符,它以及之后的字符都会被忽略
      parseFloat("more1.11") //NaN 如果以字母开头直接NaN
      parseFloat(" 1.11") //1.11 字符串开头的空格会自动忽略

      //注意⚠️
      parseFloat(".1.11") //0.1 如果字符串有两个点,第二点之后的内容会被忽略掉
      parseFloat("..1.11") //NaN 开头多个点会NaN
      • string:需要被解析成浮点数的字符串    
      • parseFloat是个全局函数,不属于任何对象  
      • parseFloat将它的字符串参数解析成为浮点数并返回,如果在解析过程中遇到了正负号(+或-)、数字(0-9)、小数点、或者科学记数法中的指数(e或E)以外的字符,则它会忽略该字符以及之后的所有字符,返回当前已经解析到的浮点数,同时参数字符串首位的空白符会被忽略   
      • 可以通过调用isNaN函数来判断parseFloat的返回结果是否是NaN,如果让NaN作为了任意数学运算的操作数,则运算结果必定也是NaN  
      • parseFloat 也可转换和返回Infinity值. 可以使用isFinite 函数来判断结果是否是一个有限的数值 (非Infinity, -Infinity, 或 NaN)  
    • string- 0 或 string*1 或string/1 

      ""-//123  相减
      ""*//123 相乘
      ""///123 相除 //注意⚠️
      "123a"-//NaN 字符串中不能有字母

       

    • +string 或 -string
      +""//123  正
      -""//-123 负

       

  • 任意转布尔

    • Boolean(value)   (value:可选,是用来初始化 Boolean 对象的值。)
    • //Boolean()值为false的情况:参数值为 0、-0、null、NaN、undefined、空字符串(""),或者传入的参数为 DOM 对象的 document.all 时
      Boolean(""); //false
      Boolean(); //false
      Boolean(-); //false
      Boolean(NaN); //false
      Boolean(null); //false
      Boolean(undefined); //false //Boolean()值为True的情况:除以上提到的几种情况,任何其他的值,包括值为 "false" 的字符串和任何对象,都会创建一个值为 true 的 Boolean 对象。
      //⚠️空字符串中如果有空格,返回的是true
      Boolean(" "); //true
    • !!value
      !!""  //false
      !! //false
      !!- //false
      !!NaN //false
      !!null //false
      !!undefined //false

3 JavaScript数据类型判断

  • Typeof()

    • 判断基本数据类型(基本类型number、string、boolean、undefined,除了null。)⚠️不能区分对象、数组、null、引用类型

      //typeof()输出有五种数据类型  number   string    boolean   undefined   object以及以及函数类型 function
      
      typeof("")  //"string"
      typeof() //"number"
      typeof(true) //"boolean"
      typeof(undefined) //"undefined"
      typeof({}) //"object"
      typeof([]) //"object" array返回对象
      typeof(function(){}) //"function"
      typeof(null) //"object" null返回对象 //但是怎么区分 对象、数组以及null 呢?
  • instanceof运算符

    • 判断引用类型(引用类型,即对象类型。创建对象后可以调用这个对象下的方法有Object类型、Array类型、Date类型、RegExp类型、Function类型,包装类型(Boolean、Number、String)等。

      //nstanceof对引用类型进行判断
      {} instanceof Object; //true[] instanceof Array; //truenew Date() instanceof Date; //true
      function(){} instanceof Function; //true

      //instanceof无法对原始类型进行判断
      "string" instanceof String; //false(111) instanceof Number; //false
  • Object.prototype.toString.call()

    • 能准确的判断基本类型和引用类型 

      Object.prototype.toString.call('abc')     //"[object String]"
      Object.prototype.toString.call() //"[object Number]"
      Object.prototype.toString.call(true) //"[object Boolean]"
      Object.prototype.toString.call(undefined) //"[object Undefined]"
      Object.prototype.toString.call(null) //"[object Null]" Object.prototype.toString.call({}) //"[object Object]"
      Object.prototype.toString.call([]) //"[object Array]"
      Object.prototype.toString.call(function(){}) //"[object Function]"
    • 常用的类型判断函数集合
      var valide = (function(){
      // 是否是字符串
      function isString(value){
      return Object.prototype.toString.call(value) == "[object String]";
      }
      // 是否是数字
      function isNumber(value){
      return Object.prototype.toString.call(value) == "[object Number]";
      }
      // 是否undefined
      function isUndefined(value){
      return Object.prototype.toString.call(value) == "[object Undefined]";
      }
      // 是否是null
      function isNull(value){
      return Object.prototype.toString.call(value) == "[object Null]";
      }
      // 是否是布尔值
      function isBoolean(value){
      return Object.prototype.toString.call(value) == "[object Boolean]";
      }
      // 是否是对象
      function isObject(value){
      return Object.prototype.toString.call(value) == "[object Object]";
      }
      // 是否数组
      function isArray(value){
      return Object.prototype.toString.call(value) == "[object Array]";
      }
      // 是否是函数
      function isFunction(value){
      return Object.prototype.toString.call(value) == "[object Function]";
      }
      // 是否是正则表达式
      function isRegExp(value){
      return Object.prototype.toString.call(value) == "[object RegExp]";
      }
      // 是否是日期对象
      function isDate(value){
      return Object.prototype.toString.call(value) == "[object Date]";
      }
      })();
  • constructor属性

    • constructor属性始终指向创建当前对象的构造函数

      string".constructor == String   //true
      true.constructor == Boolean //true
      ().constructor == Number //true
      {}.constructor == Object //true
      [].constructor == Array //true
    • 一个常用的函数
      function isArray(arr){
      return typeof arr == "object" && arr.constructor == Array;
      }

JS的数据类型(包含:7种数据类型的介绍、数据类型的转换、数据类型的判断)的更多相关文章

  1. javascript 判断数据类型的几种方法

    javascript 判断数据类型的几种方法一.typeof 直接返回数据类型字段,但是无法判断数组.null.对象 typeof 1 "number" typeof NaN &q ...

  2. JS 判断数据类型的三种方法

    说到数据类型,我们先理一下JavaScript中常见的几种数据类型: 基本类型:string,number,boolean 特殊类型:undefined,null 引用类型:Object,Functi ...

  3. 判断JS数据类型的四种方法

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

  4. 判断js数据类型的四种方法,以及各自的优缺点(转)

    转载地址:https://blog.csdn.net/lhjuejiang/article/details/79623973 数据类型分为基本类型和引用类型: 基本类型:String.Number.B ...

  5. 判断数组的方法/判断JS数据类型的四种方法

    参考文: 以下 3 个判断数组的方法,请分别介绍它们之间的区别和优劣Object.prototype.toString.call() . instanceof 以及 Array.isArray() h ...

  6. js中判断数据类型的四种方法总结

    js中判断数据类型的四种方法 前言 在js中,我们经常需要判断数据的类型,那么哪些方法可以用来判断数据的类型呢?哪种方法判断数据类型最准确呢? 我们来一个个分析: 1.typeof typeof是一个 ...

  7. Javascript判断数据类型的五种方式及其特殊性

    Javascript判断数据类型的五种方式及区别 @ 目录 typeof instanceof Object.prototype.toString isArray iisNaN ----------- ...

  8. 摘:SQL Server数据类型的25种

    我们大家都知道数据类弄是数据的一种基本属性,其主要是表示数据在实际操作中所表示信息的类型.任何一种计算机语言都定义了自己的数据类型. 当然,不同的程序语言都具有不同的特点,所定义的SQL Server ...

  9. java 复习整理(二 数据类型和几种变量)

    源文件声明规则 当在一个源文件中定义多个类,并且还有import语句和package语句时,要特别注意这些规则. 一个源文件中只能有一个public类 一个源文件可以有多个非public类 源文件的名 ...

  10. JS 转换数据类型

    JavaScript 是一种动态数据类型语言,变量是没有类型的,可以随机赋予任意值,若变量要转换数据类型,有两种办法:隐式转换和显式转换. 隐式转换可转换为字符串(将一个值加上字符串) 数字(在值的前 ...

随机推荐

  1. webstorm配置Monokai-Sublime.jar主题

    https://github.com/OtaK/jetbrains-monokai-sublime 导入下载的Monokai-Sublime.jar jar包即可使用.

  2. 最简单的启动并连接一个redis的docker容器

    启动一个容器: $ sudo docker run --name <name> -d redis 连接一个容器: sudo docker run -it --link <name&g ...

  3. 搭建简单的Habernate环境(一)

    一.开篇 下载Habernate所需要的jar包和mysql驱动. 二.建立java项目并且导入所需要的包 三.建立实体类和配置映射文件 user实体类 package testPackage; pu ...

  4. HDU 3830 Checkers(二分+lca)

    Description Little X, Little Y and Little Z are playing checkers when Little Y is annoyed. So he wan ...

  5. 使用pgpool管理数据库集群故障的问题

    pgpool如何选举master角色 在pgpool启动的过程中通过对 pgpoo.conf配置文件中的数据库节点条目信息,对集群中的数据库节点从0开始一个个的遍历,并发送SQL语句“select p ...

  6. gcc编译c中有与lua交互的代码

    编译C程序中有与Lua有关的程序(编译环境是Linux系统,lua解释器是luajit)gcc -o test30 test30.cpp -I/usr/local/include/luajit-2.0 ...

  7. Java学习进阶—高级编程

    当你已经熟练的掌握了面向对象中的各种概念后,是否会对这些知识是如何使用的产生浓厚的兴趣?本课程主要针对于已经掌握了JAVA核心开发技术的读者准备,讲解了JAVA多线程.常用类库.IO编程.网络编程.类 ...

  8. JVM 原理

    0 引言  JVM一直是java知识里面进阶阶段的重要部分,如果希望在java领域研究的更深入,则JVM则是如论如何也避开不了的话题,本系列试图通过简洁易读的方式,讲解JVM必要的知识点. 1 运行流 ...

  9. Thunder9(迅雷9)去掉右侧浏览器广告的方法

    1.打开文件夹C:\Program Files (x86)\Thunder Network\Thunder9\Program\TBC 2.找到 ThunderBrowser.exe 3.重命名为任意名 ...

  10. eclipse引入svn插件,并将项目同步到svn

    1. eclipse中不存在SVN问题的解决 1.1发现Team->Share project 下没有svn. 1.2下载安装svn插件. 选择help->Eclipse Marketpl ...