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() 强制转化为字符串;
- 标签函数(了解)