Javascript高级程序设计温故而知新

本文深入探讨JavaScript中的高级特性,如Array类的length属性使用、数组方法的细节、字符串处理技巧及对象属性的定义方式。此外,还介绍了原型链的工作原理及如何通过不同方式访问对象属性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Array类的length是可读可写的量。通过length可以裁剪数组
Array.prototype.push将会返回Push之后的长度
Array.prototype.concat()可以接收多个参数。并把这些都全部加在一个数组里,不过不会修改原数组

splice方法。
提供两个参数。第一个参数是要删除元素的起始位置,第二个是要删除的元素的个数。
提供多个参数,进行删除插入。前两个参数负责删除,后面的负责插入。如果不删除,第二项填0

字面量在判定相等的时候都是即便是内容相等也返回false

var a={prop:1}
a==={prop:1};//false
a=={prop:1};//false

函数表达式需要等到执行到才可以执行。函数声明则不

最好用arguments.callee进行解耦

引用类型和基本包装类型最主要的就是对象的生存期。如果是使用new创建的引用类型实例,那么执行流会一直生存到当前作用域结束。如果是自动创建的则其基本包装类对象只存在一瞬间。

var s = "sad";
s.color = "red";
s.color;//null

需要注意的是,使用new调用基本包装类性的构造函数和直接调用同名函数的结果是不一样的。

var number = Number("123");
typeof number;//number

var number2 = new Number("123");
typeof number2;//Object

获取字符串中某位置字符方法:charAt()
获得某位置ASCCI码方法:charCodeAt()

由于str也是可以通过下标访问的,因此可以通过Array.prototype.func.call来调用数组方法。
trim()方法不会修改字符串内容,只会创建副本。

使用encodeURIComponent()函数对所有非字母数字进行编码。decodeURIComponent()进行解码。
执行过一次bind后返回的对象将不能再次bind.

每一个数据属性都有四个特性:

  1. [[Configurable]]:表示能否通过delete删除属性从而重新定义属性
  2. [[Enumerable]]表示能否通过for-in循环返回属性。
  3. [[Writable]]表示能否修改属性的值
  4. [[Value]]表示值
var a = {_name:123}

Object.defineProperty(a, 'name', {
    get:function(){
        return "我是"+this._name;
    },
    set:function(newVal){
        if(newVal>20){
            this._name=newVal;
        }
    }
})

这里_name是数据属性,我们定义了访问器属性name,通过name也可以访问到_name属性并且灵活的调整set和get。

通过Object.defineProperties()方法可以给对象一次性定义多个访问器属性。

Object.defineProperties(
    a,{_name:{value:23,writable:false},{name:{get:function(){return this._name;},set:function(){}}
        }
    }
)

第一个参数填需要进行更改的对象,第二个参数填入字面量,字面量内是每一个要添加的属性的数据属性/访问器属性内容
只要是继承的,typeof都会返回true。

可以通过对象实例来访问保存在原型中的值,但是不能通过对象实例来重写原型中的值,他会在实例的属性中添加这个值并且遮盖掉原型链中的值。但是通过__proto__.prop就可以访问到。
即便是在实例中设置属性为null也不会消除对原型属性的遮蔽。除非使用delete

可以通过hasOwnProperty()来获取到实例中是否有这个属性而不考虑原型链的。

如果要判断实例有这个属性(包括原型链中的属性)用in这个操作符。
通过for-in循环返回的是对象能够访问到的(包括原型链),而且enumerable设置为true的属性

Object.defineProperty(c,'name',{enumerable:false})
for(ele in c){console.log(ele);}//only age
Object.keys(obj)//将返回所有可枚举的,属于实例对象的属性的属性名数组。
Object.getOwnPropertyNames(obj);//返回的是所有实例属性(不包括原型链),不管是否可枚举
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值