成人无码视频,亚洲精品久久久久av无码,午夜精品久久久久久毛片,亚洲 中文字幕 日韩 无码

資訊專欄INFORMATION COLUMN

Javascript查漏補(bǔ)缺

Airmusic / 3357人閱讀

摘要:如果是自動創(chuàng)建的則其基本包裝類對象只存在一瞬間。使用對象的函數(shù)對所有非字母數(shù)字進(jìn)行編碼。表示能否修改屬性的值表示值訪問器屬性默認(rèn)為。下面是同時(shí)進(jìn)行多個(gè)屬性的設(shè)置的語法示例設(shè)置為表示不能進(jìn)行值的修改。

想復(fù)習(xí)一下javascript高級程序設(shè)計(jì)一書的內(nèi)容,寫下了下面的筆記,都是比較細(xì)的點(diǎn),想到什么就寫什么了,可能有點(diǎn)略雜。

Array數(shù)組部分

1.Array的length不僅是可讀的,而且是可寫的。這就意味著可以通過修改length來直接裁剪數(shù)組。如果length直接改大,那么沒有賦值的地方為undefined

var a = [1,2,3];
a.length=2;
a;//[1,2]
a.length=3;
a;//[1,2,undefined]

2.Array.concat()可以接受很多個(gè)參數(shù),并且也支持類型不一樣的。將會返回連接之后的副本,不會修改原來的數(shù)組

var a = [1,2,3];
var b = a.concat("a",[3,4,5],1);
a;//[1,2,3]
b;//[1,2,3,"a",3,4,5,1]

3.splice()函數(shù)

參數(shù)數(shù)目 功能
兩個(gè)參數(shù)Array.splice(startPos,delNum) 進(jìn)行刪除操作,第一個(gè)參數(shù)表示起始位置,第二個(gè)表示刪除的個(gè)數(shù)
多個(gè)參數(shù)Array.splice(startPos,delNum,*insetElems) 刪除并插入,前兩個(gè)參數(shù)同上,之后的參數(shù)為在刪除的位置需要插入的元素。如果第二個(gè)參數(shù)為0,僅進(jìn)行插入操作。
函數(shù)Function和字符串String

1.要擅于利用arguments.callee進(jìn)行解耦。我們在寫遞歸函數(shù)的時(shí)候都會在函數(shù)內(nèi)部調(diào)用自身函數(shù),這時(shí)我們?nèi)绻褂米陨淼暮瘮?shù)名,函數(shù)內(nèi)部就和函數(shù)名有耦合。我們直接使用arguments.callee就可以訪問到函數(shù)名并進(jìn)行調(diào)用

function addAll(n){
    if(n==1){return 1;}
    return n+addAll(n-1);
    return n+arguments.callee(n-1);//better!
}
var addAll_1 = addAll;
addAll_1(3);//error

2.引用類型和基本包裝類型最主要的就是對象的生存期。如果是使用new創(chuàng)建的引用類型實(shí)例,那么執(zhí)行流會一直生存到當(dāng)前作用域結(jié)束。如果是自動創(chuàng)建的則其基本包裝類對象只存在一瞬間

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

3.使用new調(diào)用基本包裝類性的構(gòu)造函數(shù)和直接調(diào)用同名函數(shù)的結(jié)果是不一樣的。

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

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

4.由于字符串也是類似一個(gè)數(shù)組,我們想要對string使用Array方法,可以使用call或者apply

var str = "123";
Array.prototype.map.call(str,function(ele){console.log(ele);}

通過這個(gè)方法可以使用數(shù)組的很多方法,比如filter,forEach等。不過貌似很多地方都可以用類似這種模式。
5.數(shù)組的方法:trim(),concat()很多都不會修改原來數(shù)組的內(nèi)容,只是創(chuàng)建副本并返回。
6.使用Global對象的encodeURIComponent()函數(shù)對所有非字母數(shù)字進(jìn)行編碼。decodeURIComponent()進(jìn)行解碼。這個(gè)之前寫爬蟲就爬到了很多類似于unicode的碼u5168,或者在網(wǎng)頁URI中的一些查詢字符%E5%93%88%E5%93%88之類的也可以通過這個(gè)進(jìn)行解碼,還算是比較好用的一個(gè)函數(shù)啦。
7.利用bind()函數(shù)進(jìn)行過一次綁定之后就再也不能夠進(jìn)行第二次綁定了。也就是說this已經(jīng)被固定下來了。

var a = {name:"A"}
var b = {name:"B"}
function getName(){console.log(this.name);}
var getA = getName.bind(a);
getA();//A
var getB = getA.bind(b);
getB();//A

8.只要是繼承的,進(jìn)行instanceof檢測的時(shí)候會返回true

a instanceof Object;//true
undefined instanceof Object;//false
null instanceof Object;//false
Object類的屬性的屬性

屬性的屬性就是指Object的屬性的一些特性。分為數(shù)據(jù)屬性訪問器屬性。數(shù)據(jù)屬性是用來存儲數(shù)據(jù)數(shù)值的,而訪問器屬性一般進(jìn)行get/set操作,而不能進(jìn)行數(shù)據(jù)的存儲。
其中,數(shù)據(jù)屬性分為四個(gè):

1. [[Configurable]]表示能否通過delete刪除屬性從而重新定義屬性
2. [[Enumerable]]表示能否通過for-in循環(huán)返回屬性。
3. [[Writable]]表示能否修改屬性的值
4. [[Value]]表示值

訪問器屬性

1.[[Configurable]]:默認(rèn)為true。表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性特性,或者能否把屬性修改為訪問器屬性;
2.[[Enumerable]]:默認(rèn)為true。表示能否通過for-in循環(huán)返回屬性;
3.[[Get]]:讀取屬性時(shí)調(diào)用的函數(shù),默認(rèn)為undefined;
4.[[Set]]:寫入屬性時(shí)調(diào)用的函數(shù),默認(rèn)為undefined。    

不能直接添加這些屬性。只能用Object.defineProperty()或者Object.defineProperties()進(jìn)行設(shè)置。例子如下

var a = {_name:123}

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

這里a并沒有name這個(gè)屬性,但是通過get()建立了從name_name的映射??梢允沟脭?shù)據(jù)屬性的操作更加靈活。
下面是同時(shí)進(jìn)行多個(gè)屬性的設(shè)置的語法示例:(writable設(shè)置為false表示不能進(jìn)行值的修改。)

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

可以通過對象實(shí)例來訪問保存在原型中的值,但是不能通過對象實(shí)例來重寫原型中的值,他會在實(shí)例的屬性中添加這個(gè)值并且遮蓋掉原型鏈中的值。但是通過__proto__.prop就可以訪問到原型鏈中的prop屬性。
即便是在實(shí)例中設(shè)置屬性為null也不會消除對原型屬性的遮蔽。除非使用delete

function Person(){
}
Person.prototype.name="aa";
var a = new Person();
var b = new Person();
a.name="bb";
b.name;//"aa"
a.name=null;
a.name;//null
a.__proto__.name;//"aa"
a.__proto__.name="bb";
b.name;//"bb"

可以通過hasOwnProperty()來獲取到實(shí)例非原型鏈中是否有這個(gè)屬性。

如果要判斷實(shí)例有這個(gè)屬性(包括原型鏈中的屬性)用in這個(gè)操作符。
通過for-in循環(huán)返回的是對象能夠訪問到的(包括原型鏈),而且enumerable設(shè)置為true的屬性

var c={name:"123",age:23};
Object.defineProperty(c,"name",{enumerable:false})
for(ele in c){console.log(ele);}//only age

如果要返回所有實(shí)例非原型鏈屬性(不管是否可以枚舉)

Object.keys(obj)//將返回所有可枚舉的,屬于實(shí)例對象的屬性的屬性名數(shù)組。
Object.getOwnPropertyNames(obj);//返回的是所有實(shí)例屬性(不包括原型鏈),不管是否可枚舉

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://m.hztianpu.com/yun/80711.html

相關(guān)文章

  • 前端背景知識查漏補(bǔ)缺

    摘要:提交內(nèi)容可以是一個(gè)提議想法初步描述該階段是對所提交新特性的正式建議。在這個(gè)階段需具備以下條件指定一名成員作為審閱通過有實(shí)現(xiàn)的或者初步編寫標(biāo)準(zhǔn),包括問題描述解決方案示例語法語義關(guān)鍵的算法及抽象實(shí)現(xiàn)在的復(fù)雜度等該階段是會出現(xiàn)標(biāo)準(zhǔn)中的第一個(gè)版本。 ECMAScript 與 JavaScript ECMAScript 是一套腳本語言的規(guī)范,內(nèi)部編號 ECMA-262 該規(guī)范由 Ecma(Eu...

    developerworks 評論0 收藏0
  • 前端背景知識查漏補(bǔ)缺

    摘要:提交內(nèi)容可以是一個(gè)提議想法初步描述該階段是對所提交新特性的正式建議。在這個(gè)階段需具備以下條件指定一名成員作為審閱通過有實(shí)現(xiàn)的或者初步編寫標(biāo)準(zhǔn),包括問題描述解決方案示例語法語義關(guān)鍵的算法及抽象實(shí)現(xiàn)在的復(fù)雜度等該階段是會出現(xiàn)標(biāo)準(zhǔn)中的第一個(gè)版本。 ECMAScript 與 JavaScript ECMAScript 是一套腳本語言的規(guī)范,內(nèi)部編號 ECMA-262 該規(guī)范由 Ecma(Eu...

    incredible 評論0 收藏0
  • 查漏補(bǔ)缺 - 收藏集 - 掘金

    摘要:醞釀許久之后,筆者準(zhǔn)備接下來撰寫前端面試題系列文章,內(nèi)容涵蓋瀏覽器框架分鐘搞定常用基礎(chǔ)知識前端掘金基礎(chǔ)智商劃重點(diǎn)在實(shí)際開發(fā)中,已經(jīng)非常普及了。 這道題--致敬各位10年阿里的前端開發(fā) - 掘金很巧合,我在認(rèn)識了兩位同是10年工作經(jīng)驗(yàn)的阿里前端開發(fā)小伙伴,不但要向前輩學(xué)習(xí),我有時(shí)候還會選擇另一種方法逗逗他們,拿了網(wǎng)上一道經(jīng)典面試題,可能我連去阿里面試的機(jī)會都沒有,但是我感受到了一次面試1...

    YuboonaZhang 評論0 收藏0
  • 前端面試題-瀏覽器/服務(wù)端/網(wǎng)絡(luò)

    摘要:同源策略是什么跨域通信同源兩個(gè)文檔同源需滿足協(xié)議相同域名相同端口相同跨域通信進(jìn)行操作通信時(shí)如果目標(biāo)與當(dāng)前窗口不滿足同源條件,瀏覽器為了安全會阻止跨域操作。 同源策略是什么? javascript跨域通信 同源:兩個(gè)文檔同源需滿足 協(xié)議相同 域名相同 端口相同 跨域通信:js進(jìn)行DOM操作、通信時(shí)如果目標(biāo)與當(dāng)前窗口不滿足同源條件,瀏覽器為了安全會阻止跨域操作??缬蛲ㄐ磐ǔS幸韵路椒?...

    jsdt 評論0 收藏0

發(fā)表評論

0條評論

閱讀需要支付1元查看
<