数据类型的分类
- 种类
- 数值,
number
,整数和小数 - 字符串,
string
,字符组成的文本 - 布尔值,
boolean
,true 和 false 两个特定值 -
undefined,表示
"未定义"或不存在,即此处目前没有任何值 -
null
,表示空缺,即此处应该有一个值,但目前为空 -
object
,表示对象,各种值组成的集合
- 数值,
- 原始类型和复杂类型
- 原始类型(
primitive type
):数值,字符串,布尔值 - 复杂类型(
complex type
):对象 - 区别
- 基本类型变量存的是值,复杂类型的变量存的是内存地址
- 基本类型在赋值的时候拷贝值,复杂类型在赋值的时候只拷贝地址,不拷贝值
- 原始类型(
- 对象的细分
- 狭义的对象(
object
) - 数组(
array
) - 函数(
function
) - 正则表达式(
regexp
)
- 狭义的对象(
数据类型区分的方法
- 三种方法
-
typeof
运算符 -
instanceof
运算符 -
Objcet.prototype.toString
方法
-
-
typeof
与instanceof
-
typeof
运算符可以返回一个值的数据类型,有以下结果- 数值、字符串、布尔值分别返回
number
、string
、boolean
- 函数返回
function
-
undefined
返回undefined
- 其他情况(
array
,null
)都返回object
- 数值、字符串、布尔值分别返回
-
instanceof
运算符可以通过返回一个布尔值来确定这个对象是是否是特定类别或特定类别的子类- 在使用
typeof
运算符返回object
时,用instanceof
可确定数据特定类型
- 在使用
-
NaN(Not a Number)
- 该属性代表非数字值的特殊值,
NaN
和任何值都不相等,包括它自己
字符串转换成数值
- 转换函数
-
parseInt()
- 可将任何进制的值(string)转换成整数,其他类型返回 NaN
- 0 开头默认为八进制,0x 开头默认为十六进制;第二个参数可指定进制
-
parseFloat()
- 与
parseInt()
类似,但字符串必须为十进制形式,且无法指定进制
parseInt("12red"); //returns 12 parseInt("010"); //returns 8 parseInt("010", 10); //returns 10 parseFloat("0908"); //returns 908 parseFloat("22.34.5"); //returns 22.34
- 与
-
- 强制类型转换
-
number()
- 转换整个值,而不是部分值
-
- 利用 js 变量弱类型转换
===
和 ==
-
===
严格相等运算符(strict equality
); 恒等运算符(identity operator
)- 若两个值类型不同,则不相等
- 若两个值都是
null
或undefined
,则不相等 - 若两个值都是布尔值 true 或 都是布尔值 false,则不相等
- 若一个值是
NaN
,或两个值都是NaN
,则不相等 - 若两个值为数字且数值相等,则它们相等
- 若两个引用值指向同一对象、数组或函数,则相等
-
==
相等运算符(equal operator
),与===
类似,但其比较并不严格;如果两个操作数类型不同,那么相等运算符会进行一些类型转换,然后再进行比较- 若两个操作数类型相同,则比较规则和
恒等运算符
相同 - 若类型不同
- 若一个值是
null
,另一个是undefined
,则它们相等 - 若一个值是数字,另一个是字符串,先将字符串转换为数字,然后进行比较
- 若一个值是 true,则将其转换为 1 ,若一个值是 false,则将其转换为 0;然后再进行比较
- 若一个值是对象,另一个是数字或字符串,则将对象转换成原始值后再进行比较
- 其他不同类型的比较均不相等
- 若一个值是
- 若两个操作数类型相同,则比较规则和
break
和 continue
-
break
语句的作用是立即退出最内层的循环或switch
语句 -
continue
语句与break
类似,但它不是退出循环,而是转而执行下一次循环- 在
while
循环中,在循环开始处指定的experssion
会重复检测,若结果为 true,循环体会从头开始执行 - 在
do/while
循环中,程序的执行直接跳到循环结尾处,这时会重新判断循环语句,之后才会继续下一次循环 - 在
for
循环中,首先计算increment
表达式,然后再次检测表达式,用以判断是否执行循环体 - 在
for/in
循环中,循环开始遍历下一个属性名,这个属性名赋给了指定的变量
- 在
void(0)
和 undefined
-
undefined
是一个全局属性,表示未定义或定义了没有赋值;void()
是一个一元运算符,传入任何参数都会返回undefined
- 在
ES5
之前,undefined
是个可读/写的变量,可以给它赋任意值;修正后,全局变量下的undefined
值为只读,不可改写,但在局部变量中仍然可以进行改写 - 使用
void()
是为了避免undefined
被改写而出现判断不准确的情况
refer to 每日一题 | 前端学习指南,JavaScript 字符串转换数字 | CSDN
网友评论