摘要:如果是自動創(chuàng)建的則其基本包裝類對象只存在一瞬間。使用對象的函數(shù)對所有非字母數(shù)字進行編碼。表示能否修改屬性的值表示值訪問器屬性默認為。下面是同時進行多個屬性的設置的語法示例設置為表示不能進行值的修改。
Array數(shù)組部分想復習一下javascript高級程序設計一書的內(nèi)容,寫下了下面的筆記,都是比較細的點,想到什么就寫什么了,可能有點略雜。
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()可以接受很多個參數(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ù)目 | 功能 |
---|---|
兩個參數(shù)Array.splice(startPos,delNum) | 進行刪除操作,第一個參數(shù)表示起始位置,第二個表示刪除的個數(shù) |
多個參數(shù)Array.splice(startPos,delNum,*insetElems) | 刪除并插入,前兩個參數(shù)同上,之后的參數(shù)為在刪除的位置需要插入的元素。如果第二個參數(shù)為0,僅進行插入操作。 |
1.要擅于利用arguments.callee進行解耦。我們在寫遞歸函數(shù)的時候都會在函數(shù)內(nèi)部調(diào)用自身函數(shù),這時我們?nèi)绻褂米陨淼暮瘮?shù)名,函數(shù)內(nèi)部就和函數(shù)名有耦合。我們直接使用arguments.callee就可以訪問到函數(shù)名并進行調(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)建的引用類型實例,那么執(zhí)行流會一直生存到當前作用域結(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.由于字符串也是類似一個數(shù)組,我們想要對string使用Array方法,可以使用call或者apply
var str = "123"; Array.prototype.map.call(str,function(ele){console.log(ele);}
通過這個方法可以使用數(shù)組的很多方法,比如filter,forEach等。不過貌似很多地方都可以用類似這種模式。
5.數(shù)組的方法:trim(),concat()很多都不會修改原來數(shù)組的內(nèi)容,只是創(chuàng)建副本并返回。
6.使用Global對象的encodeURIComponent()函數(shù)對所有非字母數(shù)字進行編碼。decodeURIComponent()進行解碼。這個之前寫爬蟲就爬到了很多類似于unicode的碼u5168,或者在網(wǎng)頁URI中的一些查詢字符%E5%93%88%E5%93%88之類的也可以通過這個進行解碼,還算是比較好用的一個函數(shù)啦。
7.利用bind()函數(shù)進行過一次綁定之后就再也不能夠進行第二次綁定了。也就是說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.只要是繼承的,進行instanceof檢測的時候會返回true
a instanceof Object;//true undefined instanceof Object;//false null instanceof Object;//falseObject類的屬性的屬性
屬性的屬性就是指Object的屬性的一些特性。分為數(shù)據(jù)屬性和訪問器屬性。數(shù)據(jù)屬性是用來存儲數(shù)據(jù)數(shù)值的,而訪問器屬性一般進行get/set操作,而不能進行數(shù)據(jù)的存儲。
其中,數(shù)據(jù)屬性分為四個:
1. [[Configurable]]表示能否通過delete刪除屬性從而重新定義屬性 2. [[Enumerable]]表示能否通過for-in循環(huán)返回屬性。 3. [[Writable]]表示能否修改屬性的值 4. [[Value]]表示值
訪問器屬性
1.[[Configurable]]:默認為true。表示能否通過delete刪除屬性從而重新定義屬性,能否修改屬性特性,或者能否把屬性修改為訪問器屬性; 2.[[Enumerable]]:默認為true。表示能否通過for-in循環(huán)返回屬性; 3.[[Get]]:讀取屬性時調(diào)用的函數(shù),默認為undefined; 4.[[Set]]:寫入屬性時調(diào)用的函數(shù),默認為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的映射。可以使得數(shù)據(jù)屬性的操作更加靈活。
下面是同時進行多個屬性的設置的語法示例:(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循環(huán)返回的是對象能夠訪問到的(包括原型鏈),而且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)//將返回所有可枚舉的,屬于實例對象的屬性的屬性名數(shù)組。 Object.getOwnPropertyNames(obj);//返回的是所有實例屬性(不包括原型鏈),不管是否可枚舉
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/80711.html
摘要:提交內(nèi)容可以是一個提議想法初步描述該階段是對所提交新特性的正式建議。在這個階段需具備以下條件指定一名成員作為審閱通過有實現(xiàn)的或者初步編寫標準,包括問題描述解決方案示例語法語義關(guān)鍵的算法及抽象實現(xiàn)在的復雜度等該階段是會出現(xiàn)標準中的第一個版本。 ECMAScript 與 JavaScript ECMAScript 是一套腳本語言的規(guī)范,內(nèi)部編號 ECMA-262 該規(guī)范由 Ecma(Eu...
摘要:提交內(nèi)容可以是一個提議想法初步描述該階段是對所提交新特性的正式建議。在這個階段需具備以下條件指定一名成員作為審閱通過有實現(xiàn)的或者初步編寫標準,包括問題描述解決方案示例語法語義關(guān)鍵的算法及抽象實現(xiàn)在的復雜度等該階段是會出現(xiàn)標準中的第一個版本。 ECMAScript 與 JavaScript ECMAScript 是一套腳本語言的規(guī)范,內(nèi)部編號 ECMA-262 該規(guī)范由 Ecma(Eu...
摘要:醞釀許久之后,筆者準備接下來撰寫前端面試題系列文章,內(nèi)容涵蓋瀏覽器框架分鐘搞定常用基礎知識前端掘金基礎智商劃重點在實際開發(fā)中,已經(jīng)非常普及了。 這道題--致敬各位10年阿里的前端開發(fā) - 掘金很巧合,我在認識了兩位同是10年工作經(jīng)驗的阿里前端開發(fā)小伙伴,不但要向前輩學習,我有時候還會選擇另一種方法逗逗他們,拿了網(wǎng)上一道經(jīng)典面試題,可能我連去阿里面試的機會都沒有,但是我感受到了一次面試1...
摘要:同源策略是什么跨域通信同源兩個文檔同源需滿足協(xié)議相同域名相同端口相同跨域通信進行操作通信時如果目標與當前窗口不滿足同源條件,瀏覽器為了安全會阻止跨域操作。 同源策略是什么? javascript跨域通信 同源:兩個文檔同源需滿足 協(xié)議相同 域名相同 端口相同 跨域通信:js進行DOM操作、通信時如果目標與當前窗口不滿足同源條件,瀏覽器為了安全會阻止跨域操作??缬蛲ㄐ磐ǔS幸韵路椒?...
閱讀 3781·2021-11-11 11:02
閱讀 3510·2021-10-11 10:57
閱讀 3622·2021-09-22 16:00
閱讀 1857·2021-09-02 15:15
閱讀 1344·2019-08-30 15:56
閱讀 1021·2019-08-30 15:54
閱讀 2750·2019-08-30 12:43
閱讀 3554·2019-08-29 16:06