JS现在有7种数据类型分别是:
- number
- string
- boolean
- object
- null
- undefined
- symbol
number
- 十进制:没有前导0的数值。
- 八进制:有前缀
0o或0O的数值,或者有前导0、且会用到0-7的八个阿拉伯数字的数值。 - 十六进制: 有前缀
0x或0X的数值。 - 二进制: 有前缀
0b或0B的数值。
string
通常用单引号或者双引号包起来。
区别一下:空字符串'',""和空格字符串' '," "。
转义
为了能够表示出类似'"这种奇葩的字符串,使用反斜杠(\)来进行转义。在非特殊字符前面使用\,\会被忽略。如果字符串中需要用到\,则要在它之前再加一个\来对它进行转义。
多行字符串
字符串默认只能写在一行内,分成多行会报错。
但是如果长字符串必须分成多行书写,可以在每一行的尾部使用反斜杠\。注意,反斜杠\后面必须是换行符,不能有其他字符(比如空格),否则会报错。
var longString = 'Long \
long \
long \
string';
longString
//"Long long long string"
或者使用连接运算符+(明智的选择)
var longString = 'Long '+
'long '+
'long '+
'string';
longString
//"Long long long string"
boolean
布尔值只有两个结果true和false
以下运算符会返回布尔值:
- 前置逻辑运算符:
! - 相等运算符:
===,!==,==,!= - 比较运算符:
>,>=,<,<=
如果某个位置预期是布尔值,那么JS会将它自动转为布尔值。规则如下:
undefinednullfalse0NaN""或''(空字符串)
除了以上六个值为false,其他都为true
object
简单来说,object就是”key-value"的集合,是一种无序的复合数据集合。
object的所有键名都是字符串,所以加不加引号都可以。但是如果你不加引号,那么就要遵循标识符的条件(比如第一个字符不能为数字,不能包含空格或运算符)。
person['name'] = person.name (前提是''里面的满足标识符的条件)
区别以下两种命令的结果。key是key,value是value,二者只是对应关系,没有绑在一起(联想一下数学中集合的概念)。
var person = {name: 'huang'}
delete person['name'] //取值这里的单引号不能省略,因为name前面可能被声明过了
// 'name' in person false
// person['name'] undefined
var person = {name: 'huang'}
person.name = undefined
//'name' in person true
// person['name'] undefined
object中的value可以是另外一个object(链式引用)
空字符串‘’可以用作键名
遍历一个object
for (var key in person){
console.log(key) //打印出所有的key(顺序随机的)
console.log(person[key]) //打印出所有的value
console.log(person.key) //这样是打不出来的
}
对象的引用
不同的变量指向同一个对象,其实它们都是指向的同一个内存地址。把这个内存地址改了,其他的引用也会变。
var o1 = ();
var o2 = o1;
//给o1中的a赋值之后,o2中的a也会变
o1.a = 1;
o2.a // 1
o2.b = 2;
o1.b // 2
但是如果你是取消了引用,那么别人的引用不会变。
var o1 = ();
var o2 = o1;
//o1不从之前的内存地址取东西了,但是o2没有变
o1 = 1;
o2 // ()
区别于数值的引用(变量都是值的拷贝)
var x = 1;
var y = x;
x = 2;
y // 1