对象的简介

string 字符串,number 数值,Boolean 布尔值,null 空值,undefined 未定义。
以上这五种类型属于根本数据类型,当前咱们看的值只有不是上边的五种,全都是对象。

Object 对象
如果应用根本数据类型的数据,咱们所创立的变量都是独立,不能成为一个整体。
对象属于一种复合的数据类型,在对象中能够保留多个不同数据类型的属性。

对象的分类:
1.内建对象(ES规范中定义的对象,在任何的ES的实现中都能够应用。)
比方:Math String Number Boolean Function Object...

2.宿主对象(由JS的运行环境提供的对象,目前来讲次要指由浏览器提供的对象。)
比方:BOM DOM

3.自定义对象(由开发人员本人创立的对象)

对象的基本操作

创建对象
应用new关键字第哦啊用的函数,是结构constructor
构造函数是专门用来创建对象的函数
应用typeof查看一个对象时,会返回object

var obj = new Object();

增加属性
在对象中保留的值称为属性
向对象增加属性
语法:对象.属性名 = 属性值

向obj中增加一个name属性obj.name = "孙悟空";向obj中增加一个gender属性obj.gender = "男";向obj中增加一个age属性obj.age = "18"

读取对象中的属性
语法:对象.属性名

console.log(obj.gender)

如果读取对象中没有的属性,不会报错而是会返回undefined

批改对象的属性
语法:对象.属性名 = 新值

obj.name = "Tom"console.log(obj.name)   //Tom笼罩孙悟空

删除对象的属性
语法:delete 对象.属性名;

delete obj.name;

属性名和属性值

属性名
对象的属性名不强制要求恪守标识符的标准,什么乌七八糟的名字都能够应用
然而尽量应用时依照标识符的标准去做
如果采纳非凡的属性名,不能采纳.的形式来操作,须要应用另一种形式。
读取时也要采纳这种形式。
语法:对象["属性名"] = 属性值

obj["123"] = 789

应用[]这种模式去操作属性,更加的灵便
在[]中能够间接传递一个变量,这样变量值是多少就会读取哪个属性

obj["123"] = 789;obj["nihao"] = "你好"var n = "nihao";console.log(obj[n]);  //输入你好

属性值
JS对象的属性值,能够是任意的数据类型。甚至也能够是一个对象

    var obj = new Object();    obj.name = "猪八戒";    var obj2 = new Object();    obj2.name = "孙悟空";    obj = obj2 //将obj2设置为obj的属性    console.log(obj) //输入孙悟空

in 运算符
通过该运算符能够查看一个对象中是否含有指定的属性
如果有则返回true,没有则返回false
语法:"属性名" in 对象

  console.log("name" in obj);  //返回true  

根本数据类型和援用数据类型

根本数据类型
JS中的变量都是保留在栈内存中的,
根本数据类型的值间接在栈内存中存储。
值与值之间是独立存在的,批改一个变量不会影响其余的变量

援用数据类型
对象是保留在堆内存中的,每创立一个新的对象,就会在堆内存中开拓出一个新的空间而变量保留的是变量的内存地址(对象的援用),如果两个变量保留的是同一个对象援用,当一个头盖骨一个变量批改属性时,另一个也会受到影响。

当比拟两个根本数据类型的值时,就是比拟值。
而比拟两个援用数据类型时,它是比拟的对象的内存地址
如果两个对象是截然不同的,然而地址不同,它也会返回false

对象字面量

应用对象字面量来创立一个字面量,更加简略。

var obj = {};

应用对象字面量。能够在创建对象时,间接指定对象中的属性。
对象字面量的属性名能够加引号也能够不加,倡议不加,
如果要应用一些非凡的名字,则必须加引号
属性名和属性值是一组一组的名值对构造,
名和值之间应用:(冒号)连贯,多个名值对之间应用,(逗号)隔开
如果一个属性之后没有其余的属性了,就不要写,(逗号)
语法:{属性名:属性值,属性名:属性值...}

var obj2 = {name:"猪八戒",            age:28,            gender:"男"  };

函数(function)的简介

函数也是一个对象
函数中能够封装一些性能(代码),在须要时能够执行这些性能(代码)
函数中能够保留一些代码在须要的时候调用
应用typeof查看一个函数对象时,会返回function

办法一:创立一个函数对象(很少应用这个构造函数)
咱们在理论开发中很少应用构造函数

var fun = new Function();

能够将要封装的代码以字符串的模式传递给构造函数

var fun = new Function("console.log('hello 这是我的第一个函数');");

封装到函数中的代码不会立刻执行
函数中的代码会在函数调用的时候执行
调用函数语法,函数对象()
当调用函数时,函数中封装的代码会依照程序执行

fun();

办法二:应用函数申明来创立一个函数
语法:

function 函数名([形参1,形参2...形参N]){            语句...}function fun2(){    console.log("这是我第二个函数");    alert("哈哈啊");    document.write("哦吼,腾飞!");}fun2()      //调用函数

办法三:应用函数表达式来创立一个函数
语法:

var 函数名 = function([形参1,形参2...形参N]){            语句...};var fun3 = function(){    console.log("我是匿名函数中封装的代码");};fun3();     //调用函数

函数的参数

能够在函数的()中来指定一个或多个形参(形式参数)
多个形参之间应用,(逗号)隔开,申明形参就相当于在函数外部申明了对应的变量
然而并不赋值

定义一个用来求两个数和的函数function sum(a,b){    console.log(a+b);};

在调用函数时,能够在()中指定实参(理论参数)
实参将会赋值给函数中对应的形参

sum(1,2);       //输入3sum(123,456);   //输入579   能够屡次调用

调用函数时解析器不会查看实参的类型,
所以要留神是否有可能会接管到非法的参数,如果有可能则须要对实参数进行类型的查看
函数的实参能够是任意的数据类型
调用函数时,解析器也不会查看实参的数量
多余的实参不会被赋值
如果实参的数量少于形参的数量,则没有对应实参的形参将是undefined

sum(123,456,"hello",true,false);     //输入579sum(123);                             //输入NaN

函数的返回值

创立一个函数,用来计算三数之和
能够应用return 来设置函数的返回值
语法:

    return 值

return后的值将会作为函数的执行后果返回
能够定义一个变量来接管该后果
在函数中return后的代码都不会执行
如果return语句后不跟任何值就相当于返回一个undefined,
如果函数中不写return,则也会返回undefined。

return后能够跟任意类型的值

function sum(a,b,c){        var d = a + b + c;        return d;};

调用函数
变量result的值就是函数的执行后果
函数返回申明result的值就是什么

var result = sum(4,7,8);console.log("result = "+result);    //输入result = 19

实参能够是任意值

实参能够是任意的数据类型,也能够是一个对象
当咱们的参数过多时,能够将参数封装到一个对象中,如何通过对象传递

    function sayHello(o) {        console.log("我是" + o.name + ",往年我" + o.age + "岁了," + "我是一个" + o.gender + "人" + ",我住在" + o.address);    }    var obj = {        name: "孙悟空",        age: "18",        gender: "男",        address: "花果山",    };    sayHello(obj);    

实参能够是一个对象,也能够是一个函数

function fun(a){    a(obj);}fun(sayHello);

返回值的类型

function fun(){    alert("函数要执行了");    for(var i=0 ; i<5 ; i++){                        if(i==2){            break;      //应用退出以后循环            continue;   //用于跳过品位循环            return;     //用于完结整个函数        }            console.log(i);    }            alert("函数要执行完了"); }fun();

返回值能够是任意的数据类型
也能够是对象
也能够是一个函数

立刻执行函数

函数定义完立刻被调用,这种函数叫做立刻执行函数
立刻执行函数,往往只会执行一次

(function(){    alert("我是一个匿名函数");      //此函数加括号为一整体不会报错 不加会报错})();(function(a,b){console.log("a="+a);console.log("b="+b);})(123,456);

办法

创立一个对象

var obj = new Object();

增加属性

obj.name = "孙悟空";obj.age = 18;

对象的属性值能够是任何的数据类型,也能够是函数

obj.sayName = function(){    console.log(obj.name);}function fun(){    console.log(obj.name);};

调办法

obj.sayName();

调函数

fun();

函数也能够成为对象的属性,
如果一个函数作为一个对象的属性保留
那么咱们称这个函数是咱们这个对象的办法
调用这个函数就说调用对象的办法(method)

然而它只是名称上的区别没有其余的区别

var obj2 = {    name:"猪八戒",    age:18,    sayName:function(){        console.log(obj2.name);     //输入孙悟空    }    };obj2.sayName();     //输入猪八戒

枚举对象中的属性应用for...in语句

语法:

for(var 变量 in 对象){}

var obj = {    name:"猪八戒",    age:18,    gender:"男",    address:"花果山",}for(var n in obj){    console.log("hello");       //输入4次hello,因为obj有四个属性}        

for...in语句 对象中有几个属性,循环就会执行几次
每次执行时会将对象中的一个属性的名字赋值给变量

    for(var n in obj){    console.log("属性名:"+n);            //输入对应属性名name,age,gender,address    console.log("属性值:"+obj[n]);        //输入值孙悟空 18 男 花果山}