LOADING...

加载过慢请开启缓存(浏览器默认开启)

loading

数据类型

2021/11/24 JavaScript
  • JavaScript 有六种简单数据类型(原始类型):Undefined、Null、Boolean、Number、String、Symbol(ES6 新增)。

  • typeof 操作符的返回结果

    • undefined 表示值未定义;
    • boolean 表示值为布尔值;
    • string 表示值为字符串;
    • number 表示值为数值;
    • object 表示值为对象或 null (null 可以看作是对一个空对象的引用);
    • function 表示值为函数;
    • symbol 表示值为符号;
    let name = "xiaoming";
    typeof name;    //"string"
    typeof (name);    //"string"
    
  • Undefined 类型

    • Undefined 类型只有一个值,即特殊值 undefined,当使用 var 或者 let 声明了变量但没有初始化时,就相当于给变量赋予了 undefined 值;
    • 永远不要显式的给某个变量设置 undefined 值,增加这个特殊值的目的就是正式明确空对象指针(null)和未初始化变量的区别;
    • 对于未声明的变量,只能执行一个有用的操作,就是对其调用 typeof;
    • 即使未初始化的变量会被自动赋予 undefined 值,但最好还是在声明变量的同时进行初始化,这样,当 typeof 返回 undefined 时,就会知道那是因为给定的变量未定义,而不是定义了未初始化。
  • Null 类型

    • Null 类型只有一个值,即特殊值 null,表示空对象指针,在定义将来要保存对象值的变量时,可以用 null 来初始化;
    • undefined 由 null 派生而来,所以他们表面上相等,即 == 返回 true;
  • Boolean 类型

    • 布尔值类型有两个字面值:true 和 false;
    • 调用 Boolean() 函数可以将其他数据类型转化为相应布尔值的等价形式:
    数据类型 转化为 true 转化为 false
    Boolean true false
    String 非空字符串 空字符串
    Number 非零数值 0,NaN
    Object 任意对象 null
    Undefined —— undefined
    • 像 if 等流控制语句会自动执行其它类型到布尔值的转换:if (name) { }
  • Number 类型

    • 整数可以使用十、八、十六、二进制来表示
    • 默认情况下,ES 会将小数点后至少包含六个零的浮点值转换为科学计数法,精确值最高可达17位小数(但是会存在舍入错误);
    • 特殊数值 NaN:意思是不是数值;涉及 NaN 的操作始终会返回 NaN 且它不等于包括它本身在内的任何值;
    • isNaN() 函数用于判断参数不是数值(在操作时会先将非数值的值转换为数值,然后再进行函数判断);
    • isNaN() 可用于测试对象。此时,首先会调用对象的 valueOf() 方法,再确定返回的值是否能转换为数值,如果不能,再调用 toString() 方法并测试其返回值;
    • 将其他类型转换为数字:Number() parseInt()(可以指定第二个参数,即被转换数字的进制) parseFloat()
  • String 类型

    • 字符串可以使用双引号、单引号、反引号标识;
    • ES 中的字符串是不可变的,即一旦创建他们的值就不能变了,要修改某个变量中字符串值,必须先销毁原始的字符串,然后将包含新值的另一个字符串保存到该变量,所有的处理都是在后台完成的;
    • 字符串值有 toString() 方法,该方法简单的返回自身的一个副本。null 和 undefined 没有这个方法;
    • 数字调用 toString() 方法会返回数字的字符串表示,括号中可以指定进制。
  • Symbol 类型

    • 符号类型是 ES6 新增的数据类型,符号是原始值,且符号实例时唯一、不可变的。用途是确保对象属性使用唯一标识符,不会发生属性冲突的危险;
  • Object 类型

    • ES 中的对象其实就是一组数据和功能的集合;
    • constructor:用于创建当前对象的函数;
    • hasOwnProperty(propertyName):用于判断当前对象实例(不是原型)上是否存在给定的属性;要检查的属性名必须是字符串或符号;
    • isPrototypeOf(object):用于判断当前对象是否为另一个对象的原型;
    • propertyIsEnumerable(propertyName):用于判断给定的属性是否可以使用 for-in 语句枚举,属性名必须为字符串;
    • toLocaleString():返回对象的字符串表示,该字符串反映对象所在的本地化执行环境;
    • toString():返回对象的字符串表示;
    • toString():返回对象的字符串表示。
  • 判断一个值是否是 null 或 undefined,可以使用 String() 转型函数:

    • 如果值有 toString() 方法,则调用它;
    • 值为 null 返回 ”null“;
    • 值为 undefined 返回 “undefined”
  • 模板字面量:

    • ES6 中新增了使用模板字面量定义字符串的能力,其保留换行符,可以跨行定义字符串;其最常用的一个特性是支持字符串插值,也就是在一个连续定义中插入一个或多个值;
    • 在技术上讲,模板字面量不是字符串,而是一种特殊的 JS 语句表达式,其求值后得到的是字符串,其在定义时立即求值并转换为字符串实例,任何插入的变量会从他们最接近的作用域中取值;
    let value = 5;
    let result = 'result is' + value;   //以前的写法
    
    let result = `result is ${ value }`;  //现在的写法
    
    • 任何插入的值都会使用 toString() 强制转化为字符串;
    • 标签函数(了解)