JS中的数据类型

188 阅读3分钟

JS现在有7种数据类型分别是:

  • number
  • string
  • boolean
  • object
  • null
  • undefined
  • symbol

number

  • 十进制:没有前导0的数值。
  • 八进制:有前缀0o0O的数值,或者有前导0、且会用到0-7的八个阿拉伯数字的数值。
  • 十六进制: 有前缀0x0X的数值。
  • 二进制: 有前缀0b0B的数值。

string

通常用单引号或者双引号包起来。 区别一下:空字符串'',""和空格字符串' '," "

转义

为了能够表示出类似'"这种奇葩的字符串,使用反斜杠(\)来进行转义。在非特殊字符前面使用\\会被忽略。如果字符串中需要用到\,则要在它之前再加一个\来对它进行转义。

多行字符串

字符串默认只能写在一行内,分成多行会报错。 但是如果长字符串必须分成多行书写,可以在每一行的尾部使用反斜杠\。注意,反斜杠\后面必须是换行符,不能有其他字符(比如空格),否则会报错。

var longString = 'Long \
long \
long \
string';

longString
//"Long long long string"

或者使用连接运算符+(明智的选择)

var  longString = 'Long '+
'long '+
'long '+
'string';

longString
//"Long long long string"

boolean

布尔值只有两个结果truefalse 以下运算符会返回布尔值:

  1. 前置逻辑运算符: !
  2. 相等运算符: ===, !==, ==, !=
  3. 比较运算符: >, >=, <, <=

如果某个位置预期是布尔值,那么JS会将它自动转为布尔值。规则如下:

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""''(空字符串)

除了以上六个值为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