数据类型包括 原始数据类型 引用数据类型
原始值
引用值
内存分为栈内存和堆内存
原始值在栈内存中
引用值栈内存只是一个地址
真正的数据存在堆内存中
var a = 1;
b = a;
a = 10;
var a = []
b = []
a.push(1)
var a = []
var b = []
console.log(a == b) // false
原始类型
String
单双引号让值变成字符串
空字符串
非空字符串
Number
不加引号的数字
无穷
NaN (在相关操作应该得到Number但是未得到时)
isNaN()
Boolean
true
false
Undefined
undefined
Null
null
数据类型转换
parseInt()
parseFloat()
.toString()
只有String Number Boolean
强制类型转换
String()
Number()
Boolean()
空字符串 false
NaN false
0 false
undefined false
null false
非空字符串 true
非0数字 true
infinity true
引用类型
数组
var arr = [1, 2, 3]
长度 arr.length
下标 0 -> arr.length-1
获取对应值
arr[下标]
字面量对象
var obj = {
键: 键值, // 键值对
}
对象没有顺序,没有下标
获取对应键值
obj.键名
obj['键名']
var b = '键名'
obj[b]
如果对象中的键全部都是数字的话,只能使用obj[0] 的方式获取对应的键值
如果一个字面量对象没有相关的文字键,只有数字键,外加一个length属性
var obj = {
"0": 1,
"1": 2,
"length": 2
}
类数组对象,实际上是对象,但是操作上和数组一样
Array.prototype.slice.call(obj) 得到的结果就是数组
如何判断一个值是否为数组
Object.prototype.toString.call(array) // [object Array]
操作符
一元运算符
+
-
+ - 有一个隐式的数据类型转换相当于Number() -会把数字变成负值
++
--
前自增/自减 后自增/自减
前
先自增,再使用
后
先使用,在自增
void
都返回undefined
new
连接元素符
+
可以用来字符串和其他数据类型的连接操作
算术运算符
+ 运算
除加号以外,算术运算符中都有隐式的数据类型转换
-
*
/
%
赋值运算符
=
+=
-=
*=
/=
%=
比较运算符
==
===
全等于比较数据类型, == 不比较数据类型
!=
!==
>
>=
<
<=
逻辑运算符
&&
前真取后
前假取前
||
前真取前
前假取后
!
有一个数据类型转换
!!值 相当于 Boolean(值)
三元运算符
条件 ? 条件为真 : 条件为假