初识JS数据类型

7种数据类型

数值/数字(number):整数和小数

字符串(string):文本

布尔(boolean):两个特殊值表示 true 和 false

符号(symbol)

null:空值

undefined:未定义 不存在

对象(object):各种值组成的集合,除上述六种之外的数据都是对象

前6种为基本(简单)类型,对象为复杂类型。

数值/数字(number)

十进制

没有前导 0 的数值

1
1.1 // .1
1.23e2  // 123 e大小写都可

二进制

0b 或者 0B 开头

0b1 // 1
0B10 // 2

八进制

前导 0 开头且只有 0-7 八个阿拉伯数字的数值,或者 0o0O 开头

011 // 9

使用注意:比如用一个变量来表示电话号码(01开头),如果用数值来存,系统可能会默认当做八进制数值,所以当遇到这种情况,应该以字符串的形式来存电话号码。

十六进制

0x 或者 0X 开头

0x11 // 17

字符串(string)

放在 '' 或者 "" 之中

"hello"
'hello'

可以是空字符串

"" // length: 0
''

也可以是空格字符串

" " // length: 1
' '

注意

  1. 单引号字符串内部可以使用双引号,反之亦然

    '"' // 表示单个双引号的字符串
    "'" // 表示单个单引号的字符串
    ''' // unexpected token
    
  2. 单引号字符串内部如要使用单引号,则必须添加反斜杠来转义,双引号字符串内部要用双引号,也是这样

    '\'' // 表示单个单引号的字符串
    "\"" // 表示单个双引号的字符串
    
  3. 转义符的日常应用

    转义符 含义
    \0\u0000 null
    \b\u0008 后退键
    \f\u000C 换页符
    \n\u000A 换行符
    \r\u000D 回车键
    \t\u0009 制表键
    \v\u000B 垂直制表符
    \'\u0027 单引号
    \"\u0022 双引号
    \\\u005C 反斜杠
  4. 多行字符串 (不是字符串内部)

    类似命令行

    var s = '12345 \
    67890';
    // '12345 67890'
    // 该换行方式不推荐使用,如果 \ 后有空格则会报错
    // 会被认为给空格转义
    
    var s ='12345
    67890';
    // unexpected token
    
    var s = '12345 ' +
    '67890';
    // '12345 67890'
    
    var s = '12345 ' 
    + '67890';
    // '12345 67890'
    
    1. 多行字符串 (字符串内部)

      var s = `12345
        67890`;
      // ES6 新语法,反引号内可表示多行字符串
      // 注意每行开头和结尾的空格
      // 此处5后无空格,6前有一个空格
      // '12345
      //   67890'
      // s.length 为 12,10个数字,1个回车,1个空格
      

布尔(boolean)

  1. 取值:truefalse

  2. a && b 运算

    a 和·b 都为 truea && btrue

  3. a || b 运算

    a 和·b 都为 falsea || bfalse

null 和 undefined

变量没有值,则为 undefined

使用惯例:`

  • 有一个对象(object),但现在不想赋值,推荐 null,表示空对象

    var obj = null
    
  • 有一个非对象,,但现在不想赋值,推荐 undefined,表示空非对象

    var n
    

对象(object)

复杂类型数据,简单说就是是由前6种简单类型数据组成的,许多 key: value的集合。

键名 (key)

键名 key 又可以称为属性 property

举例

var obj = {
    line1: 'hello',
    line2: 'world',
    line1line2: '表达式',
    '9a': '键名不符合标识符',
    9: '键名是数字',
    '': '空字符串键名',   
    'a b': '含空格键名',
    'a+b': '含运算符键名'
}
// 冒号左边是 key 是字符串,会被自动转成字符串
// 无论是否有引号,可以省略
// key 如果不符合标识符且不是数字,则必须加引号不然报错
// ES6 引入了 Symbol值也可以作为 key
// 冒号右边是 value 如果有引号,不能省略

读取属性

如果要取出 line2这个keyvalue , 我们可以使用方括号运算符([]),此时不能省略 key 的单引号,否则会被当变量处理

obj['line2'] // 'world'

var line2 = 'line1'
obj[line2] // 'hello'
// 引号不能省略,这里line2被看做了变量

obj['line1' + 'line2']  // '表达式'
// 键名等价于 'line1line2'
obj[3+6] // '键名是数字'
// 键名等价于 '9'
obj[9 + 'a'] // '键名不符合标识符'
// 键名等价于 '9a'
// [] 内可以用表达式,数字可以不加引号,会自动转化成字符串

如果键名符合标识符的条件,上述读取 line2 属性,我们可以使用点运算符 (.

obj.line2  // 等价于 obj['line2']

赋值属性

我们同样可以用方括号运算符([])和点运算符 (.)来进行赋值。

var obj = {};
obj.name = 'xxx';
// 属性赋值不需要属性已经存在
// 可已随时增加新属性

删除属性

delete obj.line2 // ture 同时删除 key 和 value
obj.line2 // undefined  没有键值
'line2' in obj // false 没有键名

var obj.line2 = undefined  // 只删除键值
obj.line2 // undefined 没有键值
'line2' in obj // true 键名仍旧存在

遍历属性(key)

for (var key in obj) {
    console.log(key)
}
// 打印key

for (var key in obj) {
    console.log(key,obj[key])
}
// 打印key和value,注意这里key是变量
// 所以不能写成 obj.key或者 obj['key']

注意点:

  1. in 运算符检查的是属性而不是键值,存在返回 true,反之false

  2. for (var key in obj) {} 循环

    遍历的属性必须是可遍历的,同时不仅遍历对象自身的属性同时遍历继承的属性

查看属性

使用 Object.keys 来查看对象的所有属性

var obj = {
    line1: 'hello',
    line2: 'world'
}

Object.keys(obj); // ["line1", "line2"]

键值 (value)

键值 value 可以是任何数据类型,不单单是字符串

var obj = {
    testBoolean: true,
    testNumber: 10, 
    testString: 'hello world',
    testNull: null,
    testUndefined: undefined,
    testSymbol: Symbol('a'),
    testObject: {name: 'XXX', age:20, male: true},
    self: obj
}

typeof 运算符

返回一个值的数据类型

// 1. 数值 number
typeof 1  // 'number'

// 2. 字符串 string
typeof '1'  // 'string'

// 3. 布尔值 boolean
typeof true  // 'boolean'

// 4. undefined
typeof undefined  // 'undefined'

// 5. 对象 object
typeof {}  // 'object'
typeof []  // 'object'

// 6. null
typeof null  // 'object'

// 7. 符号 symbol
typeof Symbol() // 'symbol'

// 8. 函数 function
function f(){}
typeof f  // 'function'
typeof Symbol // 'function'

// 9. 未声明的变量
g  // Error: g is not defined
typeof g  // 'undefined' 不会报错

你可能感兴趣的:(初识JS数据类型)