乐趣区

关于javascript:JavaScript基础4

对象的简介

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);       // 输入 3
sum(123,456);   // 输入 579   能够屡次调用

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

sum(123,456,"hello",true,false);// 输入 579
sum(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 男 花果山
}
退出移动版