数据类型分类
ES6 之前, JavaScript 的数据类型,共有六种。在之后, ES6 新增了第七种数据类型: Symbol。
Number
JavaScript中的数字型可以用来保存整数或浮点数(小数) 。
var age = 18
var pi = 3.14
科学计数法的格式:
- ECMAScript中科学计数法的格式是:数值(整数或者浮点数)后跟一个大写或者小写的字母e,再加上要乘的10的多少次幂
- eg:3.125e7== 31250000
常见的进制:
- 八进制:在数字开头加上0,八进制由0~7组成,逢八进位
- 十进制数:是组成以10为基础的数字系统,有0~9组成,逢10进位
- 十六进制数:在数字开头加上0x,十六进制数由0-9,a-f组成
数字型的范围:
- 最大值:Number.MAX_VALUE ,输出结果:1.7976931348623157e+308
- 最小值:Number.MIN_VALUE,输出结果:5e-324
数字型的特殊值:
Infinity
(无穷大): 如 Number.MAX_VALUE*2Infinity
(无穷小) :如-Number.MAX_VALUE*2NaN(非数值)
: 如’abc’ – 100isNaN()
:判断一个’参数’是否为非数字的类型,返回值为true表示非数字,false表示是数字
String
字符串是指计算机中用于表示文本的一系列字符,在JavaScript中使用单引号或双引号来包裹字符串。
var str1='单引号字符串';
var str2="双引号字符串";
单双引号嵌套:
- 在单引号字符串中可以直接书写双引号
- 在双引号字符串中也可以直接书写单引号
字符串的特点:ECMAScript中的字符串是不可变的
,意思是一旦创建,值就不能够改变。
转义字符:
模版字符串:
let m = `first line
second line`;
console.log(m);
//first line
//second line
字符串插值:
- 模板字面量最常用的特性是进行字符串插值,用过使用${}和模板字符串配合。
- 所有插入的值都会使用toString()强制转换为字符串。
let value = 5;
let m = 'second';
let n = `${value} + ${m}`;
console.log(n);
//5 + second
字符串长度:
- 字符的数量就是字符串的长度。
- 通过字符串的length属性可以获取整个字符串的长度。
访问字符串:
- 字符串可以使用“[index]”语法按照index(索引)访问字符
- index从0开始,一直到字符串的长度减1
- 如果超过了index最大值,会返回undefined。
var str = 'I\'m a programmer';
console.log(str[0]); // 输出结果:I
console.log(str[1]); // 输出结果:'
console.log(str[15]); // 输出结果:r
console.log(str[16]); // 输出结果:undefined
字符串拼接:
- 多个字符串之间可以使用“+”进行拼接
- 如果数据类型不同,拼接前会把其他类型转成字符串,再拼接成一个新的字符串。
Boolean
布尔型通常用于逻辑判断,它有两个值:true
和false
,表示事物的“真”和“假”。
console.log(true); // 输出结果:true
console.log(false); // 输出结果:false
console.log(true + 1); // true会转换成1 输出结果:2
console.log(false + 1); // false会转换成0 输出结果:1
undefined
- Undefined类型只有一个值,就是特殊值undefined。
- 当使用var或let声明了变量但没有进行初始化时,变量的值为undefined。
let message;
console.log(message == undefined); // true
// 等同于下面的例子
let message = undefined;
console.log(message == undefined); // true
- 不必显示的将变量的值定义为undefined
- 增加undefined的作用:明确空对象指针(null)和未初始化变量的区别
- 使用typeof进行检测时出现undefined的两种情况:
未声明
声明未进行初始化
let message;
console.log(typeof message); // undefined
console.log(typeof age); // undefined
null
NULL类型只有一个值,就是null。
null值表示一个空指针对象。
在定义的要保持对象的变量值时,建议使用null进行初始化。
虽然console.log(undefined==null)为true,但两者有本质区别,undefined由null派生而来。
永远不必显式地将变量值设置为undefined。但任何时候,只要变量要保存对象,当时没有对象可保存时,就要用null来填充变量。
Object
对象是一组键值对组成的无序的集合,用{}表示,键值对之间用逗号分隔。
var myObj = {
isObj = true,
num: [1,2,3],
desp: '对象好像什么都可以包含'
}
键均为字符串类型,值可以是任意数字类型。
获取一个对象的属性可用"对象名.属性(键名)的方式"。
ES6允许将表达式作为对象的属性名,即把表达式放在方括号内。
let numproperty = 'num';
var myObj1 = {
[numproperty]: [1,2,3],
['des'+'cription']: '我是一个对象'
};
Symbol类型
数据类型检测
typeof
基础(原始)类型:
typeof 1 === "number" // true
typeof "a" === "string" // true
typeof true === "boolean" // true
typeof undefined === "undefined" // true
typeof Symbol() === "symbol" // true
引用类型:
typeof null === "object" // true
typeof {} === "object" // true
typeof [] === "object" // true
typeof function () {} === "function" // true
instanceof
判断是否出现在该类型原型链中的任何位置。
一般判断一个变量是否属于某个对象的实例
console.log(null instanceof Object) // false
console.log({} instanceof Object) // true
console.log([] instanceof Object) // true
console.log(function(){} instanceof Object) // true
Object.prototype.toString
let toString = Object.prototype.toString
console.log(toString.call(1)) // [object Number]
console.log(toString.call('1')) // [object String]
console.log(toString.call(true)) // [object Boolean]
console.log(toString.call(undefined)) // [object Undefined]
console.log(toString.call(null)) // [object Null]
console.log(toString.call({})) // [object Object]
console.log(toString.call([])) // [object Array]
console.log(toString.call(function(){})) // [object Function]
console.log(toString.call(new Date)) // [object Date]
数据类型转换
转换为String
- 利用“+”拼接字符串(最常用的一种方式)
- 利用toString()转换成字符串,用于数值、布尔值、字符串值,null和undefined无法使用toSting()方式进行转换
- 利用String()转换成字符串
转换为Number
- 使用
parseInt()
将字符串转为整数,可以接收两个参数,第二个参数可是是要转换的进制数 - 使用
parseFloat()
将字符串转为浮点数 - 使用
Number()
将字符串转为数字型 - 利用算术运算符(-、*、/)隐式转换
Number()
数据类型 | 转换之后 |
---|---|
布尔值 | true转换为1,false转换为0。 |
数值 | 直接返回原数值 |
undefined | 返回NaN。 |
字符串 | 如果字符串包含有效的浮点值格式eg'1.1',则会转换为相应的浮点值,忽略前面的零。 如果字符串包含有效的十六进制格式eg'0xf',则会转换为该十六进制值对应的十进制整数值。 如果是空字符串(不包含字符),则返回0。 如果字符串包含除上述情况之外的其他字符,则返回NaN。 |
对象 | 调用valueOf()方法,并按照上述规则转换返回的值。 如果转换结果是NaN,则调用toString()方法,再按照转换字符串的规则转换。 |
let num1 = Number('Hello World!'); //NaN
let num2 = Number(''); //0
let num3 = Number('000011'); //11
let num4 = Number(true); //1
parseInt(待转换值,进制数)
考虑到Number()函数转换字符串相对复杂且有点反常规,通常在需要得到整数时可以优先使用parseInt()
函数。
parseInt()
函数更专注于字符串是否包含数值模式。
- 字符串最前面的空格会被忽略,从第一个非空格字符开始转换。
- 如果第一个字符不是数值字符、加号或者减号,parseInt()立即返回NaN。空字符串也会返回NaN,但Number()返回0。
- 如果第一个字符是数值字符、加号或者减号,则继续依次检测每个字符,直到字符串末尾,或碰到非数值字符。 eg:"1234blue"会被转换为1234 "22.5"会被转换为22。
parseInt()
函数也能识别不同的整数格式。如果字符串以"0x"开头,就会被解释为十六进制整数。
parseInt()
也接受第二个参数,用于指定底数(进制数)。 如果要解析的值是十六进制,可以传入16作为第二个参数。
parseFloat(带转换值)
parseFloat()
函数的工作方式跟 parseInt()函数类似,都是从位置 0 开始检测每个字符。
同样,它也是解析到字符串末尾或者解析到一个无效的浮点数值字符为止。这意味着第一次出现的小数点是有效的,但第二次出现的小数点就无效了,此时字符串的剩余字符都会被忽略。因此,"22.34.5"将转换成 22.34。
转换为Boolean
- 转换为布尔型使用Boolean()
- 在转换时,代表空、否定的值会被转换为false
- 除空字符串、0、NaN、null和undefined之外,其余的值转换为true。