1、数据类型:
原始值:数字、字符串、布尔值、undefined 、null 原始值存在于栈中,赋值相当于拷贝
引用值:数组、对象(自定义对象、内置对象)、函数、日期、RegExp等 , 赋值相当于拷贝地址
var b = [1, 2]; a = b; --> a : [1, 2]
1) b = [3, 4]; -->a 不变
2) b.push(3) -->b: [1, 2, 3] a:[1, 2, 3]
typeof(null) --> "object" typeof(undefined) --->"undefined"
2、数据类型转换
1)显示类型转换
- Number( )
Number("12acd")--->NaN Number("ad")--->NaN Number("123") -->123
Number(null) --->0 Number(undefined) --->NaN
- parseInt( ) parseInt(12.9) --->12 parseInt(null)--->NaN parseInt("a123bc") ---> 123
如果字符串前缀是"0x"或者是"0X",parseInt()将其解释为十六进制 parseInt("0xFF") -->255 parseInt("-0XFF") --->-255 此方法可以有两个参数,第二个参数表示第一个参数的进制 parseInt("10", 16) 将“10”是16进制,需要转成10进制的数字 ----> 16
- parseFloat( ) parseFloat("100.2abc") ---> 100.2 此方法只有一个参数
- toString( )
var demo = 10; demo.toString() --> "10" 此方法可以传入参数,表示需要转换成几进制 var n =17; c = n.toString(2) ---> c: "10001"
2)隐式类型转换
- isNaN( ) 此方法会先调用Number( ),然后将转换结果与NaN比较
isNaN(null) --->false isNaN("123abc")-->true
- ++和-- 调用Number( ),转成数字后进行++或-- var ll = "abc"; ll++; -->ll: NaN
- 一元正负(+ -)转换成数字类型,隐式调用Number() var a=+"12abc" --> NaN
- 加号(+) 当加号两侧有一个是字符串,就会转换成字符串 var a=1+"a"; -->"1a"
- - * / % 会转成数字 "13"%2 -->1 "a3"/2 --->NaN
- < > <= >= 按照数值大小或ASCII表顺序比较,当两边有一个是数字,就会进行数字类型转换
false > true -->false 2 > 1 > 3 --->false
"3" >2 --->true (字符串的比较) "3" > "2" ---> true "10">"9"--->false
null == undefined --->true NaN == NaN --->false
- undefined、 null 、 NaN 、""、 0、 false ------>false