对象和原始类型
对象:
多个键值对集合。
原始类型:
一个键值对。
var person = {
name: 'Brynn',
age:'20'
};
var pen = 'pilot';
这里的person是一个对象,有两个键值对,第二个的键是age,值是20。
而pen是一个原始类型
函数/数组也是对象
在JS中见到的所有,不是对象,就是原始类型。
数组是一个对象,是一个键被省略的对象。
从第一个name/value pair开始,name依次被定义为0、1、2...可以看这个例子:
var animal = ['cat', 'dog','bat'];
你可以理解成下面这样
var animalCopy = {
'0': 'cat',
'1': 'dog',
'2': 'bat'
};
函数也是一个对象,只不过比较特殊。
对象就是多个键值对的集合,把一个键值对叫做对象的一个属性。
函数这个对象的特殊点在与,它有其他对象没有的属性,一个叫name——就是这个函数的名字,另一个叫code——就是写在花括号里的东西
function test(){
var city = '西安';
console.log(`今天${city}雾霾好严重`);
}
test();
这个特殊的对象——函数,有name属性test,一个code属性var city = '西安';
console.log( '今天${city}雾霾好严重');
写下的不是函数,只是函数的一个属性——code。
这个属性比较特殊,它可以被调用,通过一个小括号,test()
------------------------可以略过,想起来就随便写的一点东西,有错误----------------------------
所以有了first class function的概念,在JavaScript中function因为是一个特殊的object,它可以像一个primitive type,或者普通的object那样,赋值给变量
var demo = function(){
var city = '西安';
console.log(`今天${city}雾霾好严重`);
}
demo();
这里的demo就是一个object,通过小括号invoke这个object的code部分
这个fuction没有name这个property,所以他叫匿名函数,因为我们可以通过demo找到它,它不需要name这个property了,当然你也可以写出来
var demo = function demo2(){
var city = '西安';
console.log(`今天${city}雾霾好严重`);
}
demo();//输出今天西安雾霾好严重
demo2();//会报错,因为没有为demo2这个function开辟内存,只有一块内存叫demo
顺带一提,上面的这种写法叫function expression,而上面的上面的那种写法叫function statement
区别在于有没有返回值,在chrome的控制台中敲下这些:
function test(){
var city = '西安';
console.log(`今天${city}雾霾好严重`);
}
然后回车,什么都没有,没有返回值,这是statement
而敲下这些:
var demo = function(){
var city = '西安';
console.log(`今天${city}雾霾好严重`);
}
会返回一个demo,因为 = 是一个运算符,它有一个返回值,这是expression
原始类型
原始类型有六种: boolean、number、string、null、undefined以及ES6提出的symbol。(注意首字母都是小写的)
1.关于undefined和null:不要使用var a = undefined;这样的语句,undefined是JavaScript引擎对所有变量赋的初始值,如果要表示一个变量的值为空,可以用var a = null;,这样可以区别是开发者自己定义的值还是JavaScript引擎赋初始值的