2018-12-12
2018-12-12 本文已影响0人
废废_siri
引用数据类型
引用数据类型包括:对象、数组、函数。
引用数据类型概念
对象(类型的值)是某个特定引用类型的实例。
构造函数原本是一个普通函数,只是出于创建新对象而定义了构造函数。在ECMAScript中本质上没有构造函数,只是函数的构造调用(new 构造函数名())。
构造函数首字母一般大写。
image.png
新的实例对象会继承构造函数对象的方法与属性。如上面创建的obj对象会继承Object()函数的方法与属性。
对象的分类
对象的分类:
1.内建对象
- 由ES标准中定义的对象,在任何的ES的实现中都可以使用
- 比如:Object Function Array Date Math String Number Boolean
2.宿主对象
- 由JS的运行环境提供的对象,目前来讲主要指由浏览器提供的对象
- 比如 BOM DOM
window.prompt() //BOM提供的方法
document.wirte() //DOM提供的方法
3.自定义对象
- 由开发人员自己创建的对象
--
自定义对象
<script>
// 在js中有个不成文的规定 首字母大写的函数 一般使用起来都是构造调用的
var result = Object(); //普通函数调用
var obj = new Object(); //构造函数调用并创建obj对象
obj={
name:"siri",
age:10
}
console.log(obj.name)
</script>
Object
万物都是对象,函数也是对象。
创建Object实例
语法一:
var obj = new Object();
obj.name = "siri";
obj.age = 20;
语法二(字面量表示法):
var obj={
name:"siri",
age:20
}
注:语法二是语法一的语法糖。
--
对象的属性值可以是一个对象。
<script>
//属性中还可以定义对象
var obj={
name:"sum",
age:10,
wife:{
name:"siri",
age:12,
},
sun:{
name:'sumsiri',
age:6
}
}
</script>
--
对象的属性值可以是一个函数
<script>
//对象的属性值可以是一个函数
var obj={
test:function () {
console.log("test")
}
}
obj.test()
var obj = new Object()
console.log(typeof Object) //Object的数据类型是function
//obj的数据类型是object
</script>
对象属性的增删改查
创建对象(create):
var obj={}; //创建一个空对象create
obj["name"]="siri";
obj["age"]=11;
删除属性delete
delete obj["name"];
console.log(obj["name"]);
//删除后的属性的数据类型为undefined
更新属性值update
obj["name"]="sam"; //更新属性值update
console.log(obj["name"]);
读取属性值read
console.log(obj["name"]) //读取属性值read
语法糖
既可以用对象.属性名为其设置属性值,也可以对象["属性名"]为其设置属性值。“对象.属性名”是“对象["属性名"]”的语法糖。
<script>
//创建并初始化对象
var obj={
name:"siri",
age:18
}
//语法糖:对象.属性名
console.log(obj.name);
</script>
in运算符
<script>
//in运算符--检查一个对象中是否含有指定的属性
var obj={
name:"siri",
age:13
}
//"属性名" in 对象名
console.log("name" in obj);
</script>
for in
将对象的属性名遍历一遍。
<script>
var obj={
name:"siri",
age:20,
weight:100,
height:160
}
//for in将obj对象的属性名遍历一遍,而不是属性值
for(var item in obj){
console.log(item);
}
</script>
数据存储位置
基本数据类型的值存储在栈中,各自独立,而对象的值存储在堆中,每创建一个新对象就开辟一块新的内存空间,而变量保存的是对象的地址,当两个变量保存的是同一个对象的地址时,其中一个对象通过变量属性时,那么另一个也会受影响。
image.png
注:js中只有值传递,引用传递也就是地址值传递,不属于引用传递。
Funciton
用Function构造函数构造出来的实例对象会继承Function函数的属性与方法。函数是ECMAScript中的一等公民。
创建Function实例
var f = new Function("x","y","return x+y;");
//Function可以接收任意个参数,前面的参数是新函数枚举出的参数,最后一个参数会成为函数体。
--
函数声明
<script>
//函数声明
function test(x,y){ //x,y为形参
console.log(x+y)
}
test(1,5) //函数调用,1和5是实参
</script>
--
函数表达式
var f3=function(x,y){
return x+y;
}
--
立即可执行函数表达式
(function(){})()
--
没有重载
同名函数之间存在的是覆盖的关系,后面的覆盖前面定义的函数。
<script>
function test(a) {
console.log(a)
}
//后面的函数会覆盖前面的函数,js中函数无重载,只匹配函数名,不匹配实参与形参的个数
function test(a, b) {
console.log(a, b)
}
test(1, 4, 5)
</script>