对象的动态特性是指:在对象创建出来之后,为对象添加新的属性或者方法。
给对象添加属性和方法有两种:
- 点语法
- []
使用点语法给对象添加属性和方法
var obj = {
name: "kong",
age:23
}
// 使用点语法 : 给obj对象添加属性和方法
obj.hobby = "runing";
obj.eat = function(){
console.log("开开心心的大吃!")
}
console.log(obj);
obj.eat();
如果给代码做些变化呢
obj.name = "diligentkong";
console.log(obj.name); //输出 diligentkong
**使用点语法进行赋值的时候,如果对象存在该属性,是修改操作;
如果对象不存在该属性,是给该对象新增属性并且赋值**
使用中括号[]的方法
对象名[属性名] 注意:这里的属性名是字符串
通过对象名[属性名]的方式可以做到:
1.获取对象的属性值
2.修改对象的属性值
3.为对象新增属性并赋值
看例子
获取对象的属性:这是获取obj的name属性
console.log(obj["name"]); //diligentkong
修改对象的属性值,将obj对象的name属性的值修改为kongkong
obj["name"] = "kongkong";
console.log(obj["name"]); //kongkong
// 为对象新增属性并赋值
obj["sing"] = {
singer : "张信哲"
};
console.log(obj["sing"]);
obj["drink"]=function(){
console.log("我喜欢和白开水");
}
obj[drink](); //我喜欢和白开水
这里要说一下in关键字
in关键字的用法
1.在for..in 循环中遍历对象的键
2.判断属性是否存在对象中 语法: 属性名 in 对象
举例:
for...in
var obj = {
name:'kong',
age:23
}
for (var k in obj) {
console.log(k);//输出 name age
console.log(typeof k); //输出 string string
}
通过以上可以发现 对象的键为string字符串类型
也就是说 使用in关键字的时候,属性名称为字符串类型,需要用引号引起来
举例:
var paraName = "name";
var isExsit = paraName in obj;
console.log(isExsit); // true
简单写成:
console.log("hobby" in obj);
在混入式继承关系上,如果要把一个对象的属性和方法 拿过来用到另一个独享上,要使用[]的方式获取属性、添加属性。若是使用点语法,那么会把k当做变量,而不是对象的键。看例子
//当前没有的属性和方法,别人有,拿过来用 ,就是继承(继承后续会解释的)
var o = {
}
var obj = {
name :"diligentkong",
age : 18,
sayHello :function () {
console.log("Hello world");
}
}
//混入式继承
for(var k in obj){
// 一定要使用[]的方式,否则会把k当做属性
o[k] = obj[k];
}
console.log(o);
in 关联数组
var arr=[2,4,6,8,10];
console.log(0 in arr); // 输出true
刚才提到 对象的键是字符串类型,为什么在关联数组的时候,打印输出的是true呢?
因为 in关键字操作数组的时候判断的是索引是否存在而不是值,当索引不是字符串的时候,会做一个隐式转换,将0 修改为”0”
看
console.log("0" in arr); // true
也就是console.log(0 in arr); <=>console.log("0" in arr); // true 隐式转换
如何判断数组中是否存在指定的值
- for循环 如果找到了就输出
- indexOf 返回值为指定的数对应的索引,如果没有找到 返回-1
console.log(arr.indexOf(9)); // -1
delete关键字
1.delete关键字可以用来删除对象的属性,还有未使用var声明的变量
2.delete关键字有返回值 用来表示删除属性是否成功
3.如果删除的是不存在的属性,返回值为true
4.如果删除的属性存在原型当中,那么返回值为true,但是并未删除
自己对号入座吧!
var obj = {
name : "kong",
age : 20
}
console.log(obj.name);
var result = delete obj.name;
console.log(obj.name, result); // undefined true
var num = 10;
num1 = 100;
console.log(num1); //100
result = delete num1;
console.log(window.num1, result); // undefined true
var num = 10;
var result = delete num;
console.log(result); //false
var result= delete obj.gender;
console.log(result); //true
console.log(obj.toString()); //[object Object]
var result = delete obj.toString;
console.log(result); //true
console.log(obj.toString());//[object Object]