JS有7种数据类型,其中又分基本类型(简单类型)和复杂类型,复杂类型由基本类型组成。

Number类型

二进制 八进制 十进制 十六进制
一般以0b开头 一般以0开头 1 , 1.1 , .1 以0X开头
1
2
3
4
5
js中一般可以.1表示1.1,可以用到科学计数法。

1 + .1 === 1 + 1.1// 1.1

1.23e2 // 123

String类型

1
2
'你好',"你好",'',"",' '," ",都是字符串。
空字符串的length属性为0,而空格字符串的length属性是1。

在JS中,有个符号叫做转义符号是\,它的作用有:

1
2
3
4
let a = '\`' // a = ' 表示单引号
let b = "\\" // b = \ 表示转义符
let c = '\n' // c表示回车
let d = '\t' // d = " " 表示tab(制表符)

多行字符串(不是字符里有回车):

1
2
3
4
5
6
7
8
let s = '12345 \
67890' // 这个写法是正确的,但是不推荐,因为一旦转义符号后有空格浏览器就会报错
let s1 = '12345'+
'67890' // 这个写法也是正确的。
let s2 = `12345
67890` // 这是符合ES6语法的,在模板字符串里面表示的空格和回车都会被显示出来。
let s3 = '12345\
67890' // s3 会报错 因为s3 第一行后面有空格

Boolean类型

boolean类型只有2个值,一个是true,一个是false

1
2
3
4
5
6
7
8
9
let a = ture 
if( a === ture){ // 执行 因为a为true
console.log(a)
}

let b = false
if(b === ture){ // 不执行 因为b为false
console.log(b)
}

其中还有&&(与运算),||(或运算),!(取反运算)。

与运算,只要有一个为false,所有值为false:

a&&b true false
true true false
false false false

或运算,只要有一个为true,所有值为true:
||符号打出来制表有点问题,用代替||

a或b true false
true true true
false true false

取反运算,一般用来将其他数据类型转换为boolean数据类型:

1
2
3
4
5
6
7
8
9
10
!true  // false
!false // true
![] // false
!![] // true
!0 // true
!!0 // false
!1 // false
!!1 // true
!2 // false
!!2 // true

Null类型

null类型只有一个属性就是null.

Undefined类型

undefined类型也只有一个属性为undfined.

nullundefined 都表示什么也没有 是JS之父设计JS的BUG。
其中有2点值得说明一下。
1.变量声明没有赋值时,一般用undefined。
2.有一个对象,但是现在不想赋值,一般用null。

1
2
let n          // n为undefined 声明了没有赋值
let obj = null // obj为null obj为一个对象,但是不想赋值。

一般惯例是 null 表示空对象,undefined 表示空非对象。

Symbol类型

暂时不写。

以上6种为简单类型


Object类型

object为复杂类型,由以上6种基本类型组成。
Array和Function不是基本类型,都属于Object类型。

  • 对象的声明

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    let name = 'lee';
    let age = 18
    //上面这种相关属性可以写到一个对象里,即:
    var person = {
    'name':'lee',
    'age':18, //其中这个逗号在ES3(IE7以下)的时候不可写,但是ES5(IE8以下)支持这种语法了。
    }
    //上面这种写法还可以写成
    var person = {
    name:'lee',
    age:18, //对象默认左边key值为字符串,加不加引号,都不会出错,
    // 但是右边value属性只能是字符串或者数字
    }
  • 读对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    let person = {
    name:'lee', // 对象里可以是String类型
    age:18, // 对象里也可以是Number类型
    married:false, // 对象里还可以是Boolean类型
    children:{ // 对象里可以是对象
    name:xxx,
    age:1
    }
    }
    //对象还可以是他自己:
    let person
    person = {self:person}


    person['name'] //这是正确的读取属性写法,在符合标识符情况下,还可以
    person.name //用这种写法来读取属性


    person[name] //这是错误的写法

    let name = 'fuck'
    person[name] === person['fuck'] //值为undefined


    // key 可以是空字符串'',
    // 但不能是字符串与数字的组合例如'8a','a8','1a2',
    // 这种类似的 key 想要使用,必须用''或者""引号括起来。
  • 删除对象属性

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    let person = {
    name:'lee',
    age:18,
    married:false,
    children:{
    name:xxx,
    age:1
    }
    }

    delete person['children']
    person['children'] //再次访问children的属性则为undefined 无value
    'children' in person // false 无key
    //另一种方法
    person['children'] = undefined // 无value
    'children' in person // true 有key
  • for...in遍历对象

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    let person ={name:'lee',age:18}
    for(let key in person){ // 遍历key
    console.log(key) // key 可以是name先出现,也可以是age先出现
    }
    for(let key in person){ // 遍历key的值,即key对应的value
    console.log(person[key]) // 这种是正确的写法,
    // person['key']和person.key是错误的写法
    }
    for(let key in person){ // 遍历key和对应的value
    console.log(key,person[key]) // 浏览器会弹出key名 和value对应的字符串或者数字
    }

有一个typeof方法可以查询基本类型是什么,但是有2个BUG:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
let a = '你好'
typeof a // "string"
let b = 1
typeof b // "number"
let c = true
typeof c // "boolean"
let d = undefined
typeof d // "undefined"
let e = null
typeof e // "object" 这是第一个BUG,理论上应该返回null
let f = function(){}
typeof f // "function" 这是第二个BUG,理论上应该返回object
let j = {}
typeof j // "object"
let h = Symbol()
typeof j // "symbol"

这就是JS的7种数据类型,我认为JS之父说的一句话很好,『原创之处并不优秀,优秀之处并非原创』,一起继续学习,继续改进。

__END__

o0Chivas0o
文章作者:o0Chivas0o
文章出处JS数据类型(一)
作者签名:Rich ? DoSomethingLike() : DoSomethingNeed()
版权声明:文章除特别声明外,均采用 BY-NC-SA 许可协议,转载请注明出处