JS 里的数据类型

2018-11-04  本文已影响13人  写代码的海怪

数据类型

简单数据类型

number, string, boolean, symbol, undefined, null

复杂数据类型

object

Object 里的类型

Array, Function, Object

Number 类型

整数和浮点数

JavaScript 内部,所以数字都是以64位浮点数形式存储,即使整数也是如此。所以,1和1.0是一样的

1 === 1.0 // true

Javascript 语言的底层根本没有整数,所以数字都是小数。

0.1 + 0.2 === 0.3 // false
0.3 / 0.1 // 2.99999

数值的表示法

科学计数法表示

123e3 // 123000
123-e3 // 0.123

用科学计数法的情况是

  1. 小数点前的数字多于21位
123123123123123123123
  1. 小数点后的0多于5个
0.0000003 // 3e-7

数值的进制

Boolean 类型

布尔值就只有 true 和 false 两个值。还有一些简单的运算

a && b
a || b

JS 比较坑的就是别的类型转Boolean,下面总结一下常见的转换。下面6个值都为false,其他都为true

  1. undefined
  2. null
  3. false
  4. 0
  5. NaN
  6. “” 或 ‘’ (空字符串)

String 类型

多行字符串

如果 \ 后现还有空格,那么就是语法错误

'1\
2\
3\
' // '123'

ES6 语法,下面的字符串是包含回车的,len + num(\n)

`1
2
3
`

转义

当要使用一些特殊的字符时,要加上反斜杠来进行转义

'\''

Null, Undefined 类型

undefined和null区别

  1. null 是一个表示“空”的对象,转为数值时为0
  2. undefined是一个表示“此处无定义”的原始值,转为数值时为NaN

例子

  1. 变量没有值 -> undefined
  2. 有一个对象 object ,现在还不想赋值 -> 给他一个 null(推荐)
  3. 有一个非对象,不想给值 -> 给他一个 undefined(推荐)
var n // n -> undefined,说明 n 现在学不确定是什么值
var obj = null // obj -> obj,说明以后这个obj是一个对象

Object

对象是自己

var person = {
    name: 'frank',
    age: 18,
    gender: 'male',
    self: person // 自己 -> undefined
}

key的限制

空字符串

var a = {
    '': 'ok' // ok
}

console.log(a['']) // 'ok'

不加引号

正常来说不加引号也是可以定义一个对象的key-value,而如果不加引号会按照定义变量的规则来定义key的名字

var a = {
    9a: 'yes' // false
    '中文': 'chinese' // true
}

key的操作

删除一个key

delete person['name']

person.name // undefined -> 不存在name属性了

'name' in person // false -> 不存在于person中

如果只是赋值 undefined 那么属性还是存在于对象中

var person = { name: 'ok' }

person.name = undefined

person.name // undefined -> 值没了
'name' in person // true -> key还存在

遍历对象

for … in 循环有两个使用注意点

let person = {
    name: 'frank',
    age: 18
}

for (let key in person) {
      console.log(typeof person[key]) // 查看对应的 value 的类型
    console.log(key) // 打印出 key
    console.log(person[key]) // 打印出 key 对应的 value
}

确定类型

typeof

Typeof 运算符可以返回一个值的数据类型

typeof 123 // number
typeof '123' // string
typeof false // boolean
typeof func // function

typeof undefined // undefined
typeof v // undefined

typeof window // object
typeof {} // object
typeof [] // object

typeof null // object

instanceof

相当于仔细去检查Object中的子类型

arr instanceof Array // true
obj instanceof Object // true
func instanceof Function // true

Bug

typeof null // 'object
typeof function // 'function'

with 语句

with (对象) {
    语句;
}

操作同一个对象的多个属性时,提供一些书写的方便

var obj = {
    p1: 1,
    p2: 2
}

with (obj) {
    p1 = 4;
    p2 = 4
}
// 等同于
obj.p1 = 4;
obj.p2 = 5;

注意,如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量
注意,with区块没有改变作用域,它的内部依然是当前的作用域

var obj = {};
with (obj) {
    p1 = 4;
}

// 这里就创造了一个新的 obj
上一篇 下一篇

猜你喜欢

热点阅读