js对象和包装类

对象

1. 对象的增删改查

.运算符操作对象属性
delete操作符删除对象的属性

2. 对象的创建方法

1,var obj = {} plainObject 对象字面量/对象直接量

2,构造函数创建方法

(1)系统自带的构造函数 Object() ,Array(), Number()…
var obj = new Object();
obj.name = ‘abc’;//添加属性
obj.sex = “male”;
利用这种方法创建出来的对象是一模一样的(长得一模一样),但就是两个不同的对象 。

(2)自定义的构造函数

fucntion Person(){

}
var person1 = new Person();
自定义的构造函数和普通的函数写法没区别,所以来区别就是自定义的构造函数的函数名用大驼峰式命名规则,就是首字母大写FirstName,而普通的函数用小驼峰命名规则firstName

3. 构造函数的原理

在这里插入图片描述
第一步:有了new 之后,构造函数就会执行,在它函数逻辑的最顶端隐式的生成一个this的空对象
在这里插入图片描述
第二步:执行this的赋值语句存进this对象中。
第三步:在逻辑的最后一位隐式的返回this

在这里插入图片描述

4. 构造函数的冷门知识点

如果让构造函数强制性的返回一个空对象{},那么person的对象就是空对象

function Person(name,height){
    //var this = {};
    this.name = name;
    this.height = height;
    this.say = function(){
        console.log(this.say);
    }
    return {};
    //return this;
}
var person = new Person('xiaowang',180);
var person1 = new Person('liuliu',175);

在这里插入图片描述
如果让构造函数强制性的返回number类型的数字123,那么对象person依旧还是一个对象,因为有new一个对象是不会返回原始值的,(规定原始值是不能有属性和方法的),系统就会强制性让它返回对象类型,只能返回对象类型。所以说即使你显式的写返回123,也不会返回123。

function Person(name,height){
    //var this = {};
    this.name = name;
    this.height = height;
    this.say = function(){
        console.log(this.say);
    }
    return  123;
    //return this;
}
var person = new Person('xiaowang',180);
var person1 = new Person('liuliu',175);

在这里插入图片描述

包装类

1,包装类:

new Number(),new Boolean(),newString()

var num = 123;//这是一个原始值数字,它是不能有自己的属性和方法的。

var a= new Number(123);//这是一个数字对象,它可以有自己的属性
a.say= "abc";

在这里插入图片描述
但是这个对象数字也可以像原始值一样运算.
在这里插入图片描述

2,问题导入:

//原始值是不能有自己的属性和方法的。
var num = 4;
num.len = 3;
console.log(num.len);// 但是为什么没有报错呢而是输出undefined

解释:在原始值调用属性的时候无论是赋值和查找,首先原始值不能有属性和方法,
那么系统它会隐式的new Number()新建一个数字对象,和原来的原始值num没关系,然后再这个数字对象上加一个属性len,new Number(4).len = 3,
然后系统觉得我新建的这个数字对象也没啥用 ,就选择销毁删掉。
再次访问这个num.len的时候,系统再隐式的new Number()新建一个数字对象,
但是没有添加len这个属性,因为刚才已经删除掉了。现在这个对象已经没有len这个属性了,一个对象没有要访问的那个属性就会返回undefined。

//但是string字符串也是原始值类型,为什么它会有自己的属性length呢?
var a = "abc";
console.log(a.length);//3

//第一步:new String('abc').length = 3;  ----->delete
//第二步:new String('abc').length 。 
//		这个length的属性本来就是String对象固有的属性。
//		即使第一次创建对象的时候有把它销毁了,
//		但是包装类String()里面自带的就有个属性是length

3,题目

第一题:

var arr = [1,2,3,4,5];
数组本身有一个属性length
给length赋值就把数组截断了。如下图

在这里插入图片描述
问题:基于数组的length属性,字符串也有length,问
var str = “abcd”;
str.length =2;
console.log(str);结果是啥?abcd

var str = "abcd";
str.length =2;

new String('abcd').length = 2; --->delete

new String('abcd').length = 4
console.log(str);//abcd

第二题:

 var str = "abc";
    str += 1;
    var test = typeof(str); / /test = "string"
    if(test.length == 6){
        test.sign = "typeof的返回值可能为String";
        //new String(test).sign = "XXX";=--->delete
    }
    //new String(test)没有sign属性了,刚才已经删掉了。
    console.log( test.sign);//undefined
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值