数据类型
-
1-基本数据类型:结构简单,存储在栈内存里面,操作的是值
-
字符串 string :
'' "" 'a' "a" 'asdfdf'
-
字符串天生自带一个length属性,表示字符串长度(字符个数)
-
通过字符串的索引值(下标)可以访问字符串中指定字符 索引值范围:0 - (length-1)
var str = 'hello world!'; console.log(str.length); //12 console.log(str[0]); //'h' console.log(str[str.length-1]); //'!'
-
数字 number : 正数 负数 小数
NaN
(not a number) -
js小数之间运算会有精度损失,一般应当避免小数之间直接运算
console.log(0.1+0.3); // 0.30000000000004
-
布尔 boolean :
true
真false
假 -
null 空
-
undefined 未定义(未初始化)
-
-
2-引用数据类型:结构复杂,存储在堆内存里面,操作的是地址
- 对象 object
{ key1:val,key2:val}
{}
空对象 - 数组 array
[1,2,3,'aaa']
[]
空数组- 数组天生自带一个length属性,表示数组长度
- 通过数组的索引值(下标)可以访问数组中的一项 索引值范围:0 - (length-1)
var ary = [2,3,4,5]; console.log(ary.length); //4 console.log(ary[0]); //2 console.log(ary[ary.length-1]); //5
- 正则 regExp
/^1$/
- 函数 function
function(){ }
- 对象 object
(二) 检测数据类型
-
1-typeof 通常用来检测基本数据类型
- null 检测出来结果是object , 因为null在js中被定义为一个空对象的引用
[]
,{}
,/123/
检测结果都是object
console.log( typeof '' ); //string console.log( typeof -18); //number console.log( typeof NaN); //number console.log( typeof true); //boolean console.log( typeof null); //object console.log( typeof undefined); //undefined console.log( typeof []); //object console.log( typeof /123/); //object console.log( typeof {}); //object console.log( typeof function(){}); //function
-
2-instanceof 通常用来检测引用数据类型,判断某个对象是否属于某个类的实例
console.log([] instanceof Array); //true console.log(/123/ instanceof RegExp); //true console.log({} instanceof Object); //true console.log(function(){} instanceof Function); //true
(三) 数据类型转换
-
1- isNaN() 检测一个值是否不是一个有效数字 , 是数字返回false,反之为true (隐式调用Number()方法把值转换成number类型再判断)
console.log(isNaN('12')); //false console.log(isNaN(true)); //false
-
2- Number(); 强制转换成number类型
console.log(Number('12.345')); // 12.345 console.log(Number('')); //0 console.log(Number(true)); //1 console.log(Number(false)); //0 console.log(Number(null)); //0 console.log(Number([])); //0 console.log(Number([12])); //12 console.log(Number(['12'])); //12
-
3- parseInt(); 转换成整型的数字
- 从左到右查找数字,直到碰到非数字就停止查找,把已经找到的数字返回
console.log(parseInt('12px345')); //12 console.log(parseInt('12.5px345')); //12 console.log(parseInt('12.23435')); //12
- 从左到右查找数字,直到碰到非数字就停止查找,把已经找到的数字返回
-
4- parseFloat(); 转换成浮点型的数字
-
比parseInt()多识别一个小数点
console.log(parseFloat('12.5px345')); //12.5
-
-
5- Boolean(); 转换成布尔值
-
空字符串\0\NaN\null\undefined,转换成布尔值都是false,其他的值都是true
console.log(Boolean('')); //false console.log(Boolean(0)); //false console.log(Boolean(NaN)); //false console.log(Boolean(null)); //false console.log(Boolean(undefined)); //false
-
-
6- toString(); 转换成字符串
//数组串字符串:去掉括号,加引号 console.log([1,2,3].toString()); // '1,2,3' //所有对象转成字符串结果都是 '[object Object]' console.log({name:'ujiuye'}.toString()); // '[oject Object]'
- toString() 不能操作null和undefined ,会报错
- String() 大部分情况和toString效果一样
- 可以用来把null和undefined转换成字符串
console.log(String(null)); // 'null' console.log(String(undefined)); // 'undefined'
(四) 运算符
-
1- 算术运算符
-
加 +
- 如果 + 号两边有一个是字符串,那么就是字符串连接符
console.log('10'+20); //'1020'
-
减 -
-
乘 *
-
除 /
-
取模 %
- 算术运算符两边如果不是数字,会隐式转换成数字然后运算(+除外)
-
自增 ++
var n = 0; n++; // n = n + 1; console.log(n); //1 var x = 0; var y = x++; //++写在后面,先赋值再运算 console.log(y); //0 var a = 0; var b = ++a; //++写在前面,先运算再赋值 console.log(b); //1
-
自减 –
-
-
2- 比较运算符
-
等于 == :如果数据类型不同会进行隐式转换,然后比较
-
全等 === : 数据类型和值都必须相等
-
不等 !=
-
不全等 !==
console.log( 12 == '12'); //true console.log( 12 === '12'); //false console.log( 12 != '12'); //false console.log( 12 !== '12'); //true
-
大于 >
-
小于 <
-
大于等于 >=
-
小于等于 <=
-
-
3- 赋值运算符
- =
- +=
x += y ==> x = x + y;
- -=
x -= y ==> x = x - y;
- *=
x *= y ==> x = x * y;
- /=
x /= y ==> x = x / y;
- %=
x %= y ==> x = x % y;
-
4- 逻辑运算符
-
与(且)
&&
: 两边的表达式都成立,最终结果成立 -
或
||
: 两边的表达式有一个成立,整个表达式结果成立&&
和||
: 返回决定表达式最终结果那一边的值
-
非
!
: 取反,结果一定是布尔值console.log(1&&0); //0 console.log(1&&2); //2 console.log(1&&-1); //-1 console.log(0&&-1); //0 console.log(1||0); // 1 console.log(0||false); //false console.log(1||true); //1
-
-
5- 三目运算符
条件 ? 条件成立执行的代码 : 条件不成立执行的代码 ;
(五) 不同数据类型比较的规律
- ① : 字符串和数字比较 : 字符串转数字,然后比较
- ② : 字符串和布尔值 : 字符串和布尔值都转数字,比较
- ③ : 数字和布尔比较 : 布尔转数字再比较
- ④ : NaN和任何的值比较都不相等,包括自己
- ⑤ : 字符串和数组 : 数组转字符串,再比较
- ⑥ : 字符串和对象 : 对象转字符串,再比较
- ⑦ : null和undefined比较相等,各自和其他数据类型的值比较都不相等
- ⑧ : 引用数据类型的值相比较永不相等