数据类型
简单数据类型
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
用科学计数法的情况是
- 小数点前的数字多于21位
123123123123123123123
- 小数点后的0多于5个
0.0000003 // 3e-7
数值的进制
- 十进制:没有前导的0值
- 八进制:有前缀0o或0O的数值 010 -> 8
- 十六进制:有前缀0x或者0X的值
- 二进制:有前缀0b或0B的数值
Boolean 类型
布尔值就只有 true 和 false 两个值。还有一些简单的运算
a && b
a || b
JS 比较坑的就是别的类型转Boolean,下面总结一下常见的转换。下面6个值都为false,其他都为true
- undefined
- null
- false
- 0
- NaN
- “” 或 ‘’ (空字符串)
String 类型
多行字符串
如果 \
后现还有空格,那么就是语法错误
'1\
2\
3\
' // '123'
ES6 语法,下面的字符串是包含回车的,len + num(\n)
`1
2
3
`
转义
当要使用一些特殊的字符时,要加上反斜杠来进行转义
'\''
Null, Undefined 类型
undefined和null区别
- null 是一个表示“空”的对象,转为数值时为0
- undefined是一个表示“此处无定义”的原始值,转为数值时为NaN
例子
- 变量没有值 -> undefined
- 有一个对象 object ,现在还不想赋值 -> 给他一个 null(推荐)
- 有一个非对象,不想给值 -> 给他一个 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
- Null 的 typeof 是对象
typeof null // 'object
- function 的 typeof 是 ‘function’
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
网友评论