举例描述我心目中的对象!!(一只狗的独白,委屈巴巴)
1 | //咳咳!敲黑板 |
当然啦,此对象非彼对象,就是举个例子,我们继续向下看
对象属性的增、删、改、查
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
3var 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
10var 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