JS 里的数据类型
JavaScript 的数据类型,共有六种。
1、数值(number)
2、字符串(string)
3、布尔值(boolean)
4、undefined
5、null
6、对象(object)
原始类型:number string boolean
复合类型:object
特殊值:undefined null
JS三种方法判断一个值到底是什么类型
1、typeof运算符
数值、字符串、布尔值分别返回number、string、boolean。
注意以下几个案例的typeof的返回值
typeof undefined //undefined
typeof null //object
typeof fn //function
2、instanceof运算符
3、Object.prototype.toString方法
- 数值(number)
1、整数与浮点数
JS内部,所有的数字都是以64位浮点数形式存储,JS底层语言中没有整数的概念,所有的数字都是小数,即64位浮点数,
因浮点数,不是精确的值,运算时要特别小心
0.1 + 0,2 === 0.3 //false
2、数值的表示法
下面两种情况,JS自动转换为科学计数发
(1)小数点前的数字多于21位
12324234343453454565486450978054789567
1.2324234343453454e+37
(2)小数点后的零多于5个。
.0000000009
9e-10
3、数值的进制
十进制:没有前导0的数值。
八进制:有前缀0o或0O的数值,或者有前导0、且只用到0-7的八个阿拉伯数字的数值。
十六进制:有前缀0x或0X的数值。
二进制:有前缀0b或0B的数值。
默认情况下,JavaScript 内部会自动将八进制、十六进制、二进制转为十进制。
4、特殊数值
(1)JS 内部实际上存在2个0:一个是+0,一个是-0,区别就是64位浮点数表示法的符号位不同。它们是等价的。
只有作为分子时不等价
1/0 //Infinity
1/-0 //-Infinity
(2)NaN,表示“非数字”(Not a Number),主要出现在将字符串解析成数字出错的场合。
NaN不等于任何值,包括它本身。
NaN与任何数(包括它自己)的运算,得到的都是NaN。
NaN在布尔运算时被当作false。
判断是否是NaN的方法,isNaN(),isNaN只对数值有效,如果传入其他值,会被转为数值
5、正无穷Infinity和负无穷-Infinity
Math.pow(2, 1024) // Infinity
0/0 //Nan
1/0 //Infinity
Infinity大于一切数值(除了NaN),-Infinity小于一切数值(除了NaN)
Infinity与NaN比较,总是返回false。
- 字符串(string)
1、string 用单引号或双引号表示
2、空字符串和空格字符串
''.length //0
' '.length //1
3、转义符:反斜杠 \
4、多行字符串的写法
//第一种
var x1 = '123\
234'
//第二种 (推荐)
var x2 = '123' +
234'
ES6多行字符串
var x3 = `123
344`
- 布尔值(boolean)
1、布尔只有两个值true or false
2、下面的运算符计算结果会返回布尔值
两元逻辑运算符: && (And),|| (Or)
前置逻辑运算符: ! (Not)
相等运算符:===,!==,==,!=
比较运算符:>,>=,<,<=
3、布尔值转换规则,下面六个值转为false,其他均为true
undefined
null
false
0
NaN
""或''(空字符串)
- null和undefined
null与undefined都可以表示“没有”,相等运算符(==)甚至报告两者相等,那null和undefined有什么区别呢?
undefined == null // true
null 只有一个值null
undefined 只有一个值undefined
变量没有赋值,是undefined
有一个对象,还不想赋值,推荐给一个空值null
非对象,还不想赋值,推荐给一个undefined
- 对象(object)
1、对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合
2、键名:对象的所有key都是字符串,加不加引号都可以,非字符串的key会自动转为字符串,但不加引号,key必须符合标识符
3、获取属性值
(1) object[‘key’],方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
(2) object.key,此时key是字符串key
4、查看所有属性
Object.keys方法,属性以数组的方式列出
5、删除对象的属性
delete object['key'] //删除后无key,无value
object.key //undefined
'key' in object //false
//这种情况,只是把undefined的值赋给key,key还是在的
object['key'] = undefined
6、in运算符
检查对象是否包含某个属性,如果包含就返回true,否则返回false。
var obj = { p: 1 };
'p' in obj // true
in运算符它不能识别哪些属性是对象自身的,哪些属性是继承的。继承的属性也返回true
7、for…in 循环
for...in循环用来遍历一个对象的全部属性。
它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
它不仅遍历对象自身的属性,还遍历继承的属性。