一、对象 1.1对象的概述
对象(object)是大括号定义的无序的数据集合,由键值对构成,键与值之间用冒号分隔,如果对象内部包含多个键值对,每个键值对之间用逗号分隔,最后一个键值对末尾不用加逗号。大括号末尾要使用分号表示对象定义结束。
对象是JavaScript的核心概念,也是最重要的数据类型。JavaScript的所有数据都可以被视为对象。此外,JavaScript 允许自定义对象。
var obj = { key : value }; 上面代码定义了一个对象,它被赋值给变量obj。key是“键名”,value是“键值”。
1.2健名
键名也被称为属性(property),对象的所有属性都是字符串,所以加不加引号都可以。但是,如果属性不符合标识符的条件(比如第一个字符为数字,或者含有空格或运算符),则必须加上引号。
var obj = {
'1p': "Hello World",
'h w': "Hello World",
'p+q': "Hello World"
};
上面对象的三个属性,都不符合标识名的条件,所以必须加上引号。 检查对象是否包含一个属性 'key' in obj 1.2对象属性的操作 1.检查的是键名,不是键值。如果包含就返回true,否则返回false。
var girlFriend = {
girlName:"迪丽热巴",
age:18
};
console.log("age" in girlFriend);//true
console.log("height" in girlFriend);//false
1.3对象的引用
如果不同的变量名指向同一个对象,那么它们都称为这个对象的引用。
也就是说这些变量共同指向同一个内存地址,修改其中一个变量所指向的值,都会影响到其他所有变量所指向的值。
var obj = { fire : 'burn' };
var people1_fire = obj;
var people2_fire = obj;
obj.fire = '灭了';
console.log(people1_fire.fire);//灭了
console.log(people2_fire.fire);//灭了
二、函数 2.1函数的概述
官方:函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。
个人:函数是一组拥有某些特定功能的、能够被重复调用的、闭合代码块 上图中【做包子的机器】就可以被看做是一个函数。
有某些特定功能的:能包包子
能够被重复调用的:机器能使用多次
闭合:机器在外面看不到里面有什么
我们在函数外部并不关心函数里面有什么,只关心函数能做什么。(使用机器能够得到包子)
函数的意义:在出现大量程序相同的时候,可以封装为一个function,这样只用调用一次,就能执行很多语句。
2.2函数的声明
function命令法
function 函数名(参数1,参数2,…){
函数体
}
定义一个函数,用关键字function来定义,function就是英语“功能”的意思。表示这里面定义的语句,完成了一些功能。function后面有一个空格,后面就是函数名字,函数的名字也是关键字,命名规范和变量命名是一样的。名字后面有一对儿圆括号,里面放置参数,我们一会儿介绍。然后就是大括号,大括号里面是函数的语句。
函数如果不调用,那么里面的语句就一辈子不会执行,不调用就等于白写。
function hello(){
console.log("hello");
}
2.3函数表达式法
var 变量名 = function(参数1,参数2,…){ 函数体 }; 这种声明函数的方式没有函数名,而是用变量来指代函数。调用函数的时候通过访问变量名来调用函数。
var hello = function(){
console.log("hello");
};
相较于函数声明的多种多样,函数的调用方式就简单很多。通常情况下只要函数已经被声明,直接写出函数名和函数参数即可调用函数。
函数名();
一旦调用了函数,函数内部的语句就会执行。能够感觉到,函数是一些语句的集合,让语句成为一个军团,集体作战。要不出动都不出动,要出动就全出动。得到调用才出动。
function fun1(){
console.log(10);
}
function fun1(){ console.log(20); } fun1(); 很显然通过调用能够看到,多次重复声明同名的函数会造成的结果就是:后声明的函数会覆盖先声明的函数。
对于javascript来说,把函数调用写在函数声明之前也是被允许的,因为javascript存在一个隐式的函数提升。
JS在执行前,会有一个预解析的过程,把所有的函数声明,都提升到了最最开头,然后再执行第一行语句。
所以,function定义在哪里,都不重要,程序总能找到这个函数。
fun1();
function fun1(){
console.log(10);
}
函数声明会被提升,但是函数表达式却不会被提升
fun();
var fun = function(){ //函数表达式,而不是function定义法
alert("我是函数,我执行了!");
}
2.4函数的类型
2.4.1从定义角度分
内置函数:就是指JS自带的函数,如alert、prompt、parseInt等 用户自定义函数:就是用户根据实际情况自己定义的函数 2.4.2从参数角度分
无参数、有参数
2.4.3从返回值角度分
无返回值函数、有返回值函数
2.4.4其他
回调函数、匿名函数、自执行函数
2.5函数的参数
定义在函数内部的语句,都是相同的,但是实际上我们可以通过“参数”这个东西,来让语句有差别。
定义函数的时候,内部语句可能有一些悬而未决的量,就是变量,这些变量,我们要求在定义的时候都罗列在小括号中:
function fun(a){
console.log("我第" + a + "次说爱你");
}
调用的时候,要把这个变量的真实的值,一起写在括号里,这样随着函数的调用,这个值也传给了a:
fun(88);
● 在function里面直接用var声明的变量,叫做局部变量,只在function里面有定义,出了function没有定义的。
● 定义在全局范围内的,没写在任何function里面的,叫做全局变量,都认识。
2.63不写var就自动成为全局变量
function fn(){
a = 1; //这个a第一次赋值的时候,并没有var过,
//所以就自动的在全局的范围帮你var了一次
}
fn();
console.log(a);
这是JS的一个机理,如果遇见了一个标识符,从来没有var过,并且还赋值了:
absdf = 123; 那么就会自动帮你在全局范围内定义var absdf;
告诉我们一个道理,变量要老老实实写var。
2.6.4函数的参数,会默认定义为这个函数的局部变量
function fn(a,b,c,d){
}
a,b,c,d就是一个fn内部的局部变量,出了fn就没有定义。
function fun(a){
console.log(a);
}
fun(10);
console.log(a)