基本类型:number string boolean null undefined symbol
复杂类型(引用类型),由基本类型组成,object
看一个例子:
var name = 'zhangsan'
var age = 18
var sex = 'male'
这是三个基本类型,但三个变量之间有一些关系,这个时候就可以用一个对象表示:
var person = {
name = 'zhangsan',
age = 18,
sex = 'male'
}
那么如何拿到person的name或者其他属性呢?
第一种:
person['name'] //'zhangsan'
注意:
person[name] 这种用法是错误的,这样用的话这个name就是变量,除非你定义name:
var name = 'name'
person[name]
第二种:以为着.后面跟的是字符串
person.name // 'zhangsan'
那么问题来了,什么时候可以使用person.name 这种方法呢???
当这个name不加引号且符合变量标识符的规范时,才可以用这个方法,看下面的例子:
var person = {
a1: 'hello',
}
a1符合变量标识符的规范,上面两种方法都可以使用,接着看
如果我要定义一个以数字开头的属性呢?
var person = {
a1: 'hello',
2a: 'world'
}
浏览器会报错,正确方法是这样的:
var person = {
a1: 'hello',
'2a': 'world',
'x y': '大皮鞋'
}
此时就可以用
person['2a'], person['x y']去访问里面的值,而不能用:
person.2a
看一个题目:
obj = {
'name': 'zhangsan',
'age': 10
}
for(var key in obj) {
cosnole.log(obj.key)
}
cosnole.log(obj.key) 这种写法很明显是错误的,obj.key就相当于obj['key'],key是一个字符串!!!
应该写:
cosnole.log(obj[key]),这个时候key代表的才是变量
null和undefined的区别,如何使用呢?
var a
console.log(a) //undefined
如果定义变量但没有值,就是undefined
有一个对象obj,但是现在不想给他赋值,那么就该赋值为null, var obj = null,就表示为空对象
typeof操作符
类型 | string | number | boolean | undefined | object |
---|---|---|---|---|---|
typeof结果 | ‘string’ | ‘number’ | ‘boolean’ | ‘undefined’ | ‘object’ |
但是typeof运算符有两个bug: |
typeof null === 'object'
function fn(){
}
typeof fn === "function"