国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Javascript查漏補缺

Airmusic / 3302人閱讀

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

想復習一下javascript高級程序設計一書的內容,寫下了下面的筆記,都是比較細的點,想到什么就寫什么了,可能有點略雜。

Array數組部分

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

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

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

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()函數

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

1.要擅于利用arguments.callee進行解耦。我們在寫遞歸函數的時候都會在函數內部調用自身函數,這時我們如果使用自身的函數名,函數內部就和函數名有耦合。我們直接使用arguments.callee就可以訪問到函數名并進行調用

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創建的引用類型實例,那么執行流會一直生存到當前作用域結束。如果是自動創建的則其基本包裝類對象只存在一瞬間

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

3.使用new調用基本包裝類性的構造函數和直接調用同名函數的結果是不一樣的。

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

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

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

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

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

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.只要是繼承的,進行instanceof檢測的時候會返回true

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

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

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

訪問器屬性

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

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

var a = {_name:123}

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

這里a并沒有name這個屬性,但是通過get()建立了從name_name的映射。可以使得數據屬性的操作更加靈活。
下面是同時進行多個屬性的設置的語法示例:(writable設置為false表示不能進行值的修改。)

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

可以通過對象實例來訪問保存在原型中的值,但是不能通過對象實例來重寫原型中的值,他會在實例的屬性中添加這個值并且遮蓋掉原型鏈中的值。但是通過__proto__.prop就可以訪問到原型鏈中的prop屬性。
即便是在實例中設置屬性為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()來獲取到實例非原型鏈中是否有這個屬性。

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

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

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

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

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/80711.html

相關文章

  • 前端背景知識查漏補缺

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

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

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

    incredible 評論0 收藏0
  • 查漏補缺 - 收藏集 - 掘金

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

    YuboonaZhang 評論0 收藏0
  • 前端面試題-瀏覽器/服務端/網絡

    摘要:同源策略是什么跨域通信同源兩個文檔同源需滿足協議相同域名相同端口相同跨域通信進行操作通信時如果目標與當前窗口不滿足同源條件,瀏覽器為了安全會阻止跨域操作。 同源策略是什么? javascript跨域通信 同源:兩個文檔同源需滿足 協議相同 域名相同 端口相同 跨域通信:js進行DOM操作、通信時如果目標與當前窗口不滿足同源條件,瀏覽器為了安全會阻止跨域操作。跨域通信通常有以下方法 ...

    jsdt 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<