未分类

JS对象

举例描述我心目中的对象!!(一只狗的独白,委屈巴巴)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//咳咳!敲黑板
var Boyfriend = {
name:"unknow",
age:"unknow",
sex:"male",
height:"180+",
weight:"不胖",
charm:100,
basketball:function(){
console.log("我打篮球");
this.charm ++;
},
singing:function(){
console.log("我唱歌好听");
this.charm ++;
}
}//气氛好像有点跑偏

当然啦,此对象非彼对象,就是举个例子,我们继续向下看

对象属性的增、删、改、查

1.增加属性:直接 obj.新的属性名 = xxx
2.查看属性:obj.属性名(不赋值)
3.修改属性:obj.旧属性名 = xxx
4.删除属性:delete obj.属性名
ps:当一个变量未声明就使用时会报错,但对象的属性未声明就使用则返回undefined

对象的创建方法

1.var obj = {} plainObject 对象字面量/对象直接量
2.构造函数
(1)系统自带构造函数 Object()

1
var obj = new Object();

构造函数严格遵守大驼峰式命名方法
(2)自定义

构造函数为什么能构造出对象?

构造函数内部原理
1.在函数体最前面隐式的加上this = {}
2.执行 this.xxx = xxx;
3.隐式的返回this
ps:但凡new出来的对象,返回值必为对象,人为添加原始值不可以

包装类

ps:原始值不可以有属性和方法
数字(num)、字符串(string)、布尔值(boolean)
以上三种数据类型可有两种形式

1
2
3
var num = new number(123);
var str = new String('abcd');
var bol = new Boolean('true');

上述形式会将原始值转为对象
注意当对象类型的num进行运算后,会变为原始值
Q1:既然原始值不能有属性和方法,那么str.length是怎么回事呢?
来看一个例子
eg1:

1
2
3
4
5
6
//	包装类
var num = 4;
num.len = 3;
// ****执行过程:new Number(4).len = 3; delete(系统发现原来的是原始值,不可以有属性,所以new一个,尽量满足需求,但num对象上本身没有len属性,则删除new出来的对象,此过程不影响原来的num)****
// ****new Number(4).len ->返回undefined,因为Number上并没有自带len属性,但此时的num和上一行的num不同****
console.log(num.len)

eg2:

1
2
3
4
5
//包装类
var str = "1234";
str.length = 2;
//****执行过程:new String("1234").length = 2; delete****
//new String("1234").length -> 返回 4

来看一道面试题(记录自己摔的贼惨的深坑)

1
2
3
4
5
6
7
8
9
10
var str = "abc";
str += 1;
var test = typeof(str);//test == "string"
if(test.length == 6){
test.sign = "typeof的返回结果可能是String";
//前面不多说,都知道能走进来
//上面那句的test是个原始值啊,原始值啊,原始值啊!哪来的sign啊,当然是下面这样啦!
//new String(test).sign = 'xxx'; delete
}
console.log(test.sign)//new String(test).sign ->打印undefined