JavaScript鏁扮粍鎵€链碱PI鍏ㄨВ瀵?鍗氩-浜戞尔绀惧尯-阒块噷浜?
鍏ㄦ枃鍏?3k+瀛楋纴绯荤粺璁茶В浜呙avaScript鏁扮粍鐨勫悇绉岖壒镐у拰API銆?/p>
鏁扮粍鏄竴绉嶉潪甯搁吨瑕佺殑鏁版嵁绫诲瀷锛屽畠璇硶绠€鍗曘€佺伒娲汇€侀珮鏁堛€?鍦ㄥ鏁扮紪绋嬭瑷€涓纴鏁扮粍閮藉厖褰撶潃镊冲叧閲嶈鐨勮镩诧纴浠ヨ呖浜庡緢闅炬兂璞℃病链夋暟缁勭殑缂栫▼璇█浼氭槸浠€涔堟ā镙枫€傜壒鍒槸JavaScript锛屽畠澶╃敓鐨勭伒娲绘€э纴鍙堣繘涓€姝ュ彂鎸ヤ简鏁扮粍鐨勭壒闀匡纴涓板瘜浜嗘暟缁勭殑浣跨敤鍦烘櫙銆傚彲浠ヨ豹涓嶅じ寮犲湴璇达纴涓嶆繁鍏ュ湴浜呜В鏁扮粍锛屼笉瓒充互鍐橨avaScript銆?/p>
鎴ES7瑙勮寖锛屾暟缁勫叡鍖呭惈33涓爣鍑嗙殑API鏂规硶鍜屼竴涓潪镙囧嗳鐨凙PI鏂规硶锛屼娇鐢ㄥ満鏅拰浣跨敤鏂规绾风箒澶嶆潅锛屽叾涓湁涓嶅皯娴呭潙銆佹繁鍧戙€佺敋镊崇鍧戙€备笅闱㈠皢浠峣rray鏋勯€犲櫒鍙奅S6鏂扮壒镐у紑濮嬶纴阃愭甯姪浣犳帉鎻℃暟缁勚€?/p>
澹版槑锛氢互涓嬫湭鐗瑰埆镙囨槑鐨勬柟娉曞潎涓篍S5宸插疄鐜扮殑鏂规硶銆?/p>
Array鏋勯€犲櫒
Array鏋勯€犲櫒鐢ㄤ簬鍒涘缓涓€涓柊鐨勬暟缁勚€傞€氩父锛屾垜浠帹钻愪娇鐢ㄥ璞″瓧闱㈤噺鍒涘缓鏁扮粍锛岃繖鏄竴涓ソ涔犳傥锛屼絾鏄€绘湁瀵硅薄瀛楅溃閲忎箯锷涚殑镞跺€欙纴姣斿璇达纴鎴戞兂鍒涘缓涓€涓暱搴︿负8鐨勭┖鏁扮粍銆傝姣旇缉濡备笅涓ょ鏂瑰纺锛?/p>
// 浣跨敤Array鏋勯€犲櫒 var a = Array(8); // [undefined 脳 8]
// 浣跨敤瀵硅薄瀛楅溃閲?/code> var b = [];
b.length = 8; // [undefined 脳 8]
|
Array鏋勯€犲櫒鏄庢樉瑕佺亩娲佷竴浜涳纴褰撶劧浣犱篃璁镐细璇达纴瀵硅薄瀛楅溃閲忎篃涓嶉敊鍟婏纴闾d箞鎴戜缭鎸佹矇榛朴€?br >
濡备笂锛屾垜浣跨敤浜咥rray(8)钥屼笉鏄痭ew Array(8)锛岃繖浼氭湁褰卞搷钖楋纻瀹为檯涓婏纴骞舵病链夊奖鍝嶏纴杩椤缑鐩娄簬Array鏋勯€犲櫒鍐呴儴瀵箃his鎸囬拡鐨勫垽鏂纴ELS5_HTML瑙勮寖鏄繖涔堣鐨勶细
When Array is called as a function rather than as a constructor, it creates and initialises a new Array object. Thus the function call Array(钬? is equivalent to the object creation expression new Array(钬? with the same arguments.
浠庤锣冩潵鐪嬶纴娴忚鍣ㄥ唴閮ㄥぇ镊村仛浜嗗涓嬬被浼肩殑瀹炵幇锛?/p>
function Array(){
听听 // 濡傛灉this涓嶆槸Array鐨勫疄渚嬶纴闾e氨閲嶆柊new涓€涓疄渚?/code>
听听 if (!( this instanceof arguments.callee)){
听听听听 return new arguments.callee();
听听 }
} |
涓婇溃锛屾垜浼间箮璺宠绷浜嗗Array鏋勯€犲櫒璇硶鐨勪粙缁嶏纴娌′簨锛屾帴涓嬫潵鎴戣ˉ涓娿€?/p>
Array鏋勯€犲櫒镙规嵁鍙傛暟闀垮害鐨勪笉钖岋纴链夊涓嬩袱绉崭笉钖岀殑澶勭悊锛?/p>
- new Array(arg1, arg2,钬?锛屽弬鏁伴暱搴︿负0鎴栭暱搴﹀ぇ浜庣瓑浜?镞讹纴浼犲叆鐨勫弬鏁板皢鎸夌収椤哄簭渚濇鎴愪负鏂版暟缁勭殑绗?镊砃椤癸纸鍙傛暟闀垮害涓?镞讹纴杩斿洖绌烘暟缁勶级銆?/li>
- new Array(len)锛屽綋len涓嶆槸鏁板€兼椂锛屽鐞嗗悓涓婏纴杩斿洖涓€涓彧鍖呭惈len鍏幂礌涓€椤圭殑鏁扮粍锛涘綋len涓烘暟鍊兼椂锛屾牴鎹涓嬭锣冿纴len链€澶т笉鑳借秴杩?2浣嶆棤绗﹀彿鏁村瀷锛屽嵆闇€瑕佸皬浜?鐨?2娆℃柟锛坙en链€澶т负Math.pow(2,32) -1鎴?1>>>0锛夛纴钖﹀垯灏嗘姏鍑篟angeError銆?/li>
If the argument len is a Number and ToUint32(len) is equal to len, then the length property of the newly constructed object is set to ToUint32(len). If the argument len is a Number and ToUint32(len) is not equal to len, a RangeError exception is thrown.
浠ヤ笂锛岃娉ㄦ剰Array鏋勯€犲櫒瀵逛簬鍗曚釜鏁板€煎弬鏁扮殑鐗规畩澶勭悊锛屽鏋滀粎浠呴渶瑕佷娇鐢ㄦ暟缁勫寘瑁?? 鑻ュ共鍙傛暟锛屼笉濡ㄤ娇鐢ˋrray.of锛屽叿浣撹绉绘涓嬩竴鑺伞€?/p>
濡傛灉浣犳兂瀛︿范鍓岖鍙互鏉ヨ繖涓兢锛岄鍏堟槸浜屼节涓€锛屼腑闂存槸鍏簲涓€锛屾渶钖庢槸涓€鍏节锛岄噷闱㈠彲浠ュ涔犱氦娴侊纴涔熸湁璧勬枡鍙互涓嬭浇銆?/p>
ES6鏂板鐨勬瀯阃犲嚱鏁版柟娉?/h2>
閴翠簬鏁扮粍鐨勫父鐢ㄦ€э纴ES6涓挞桊鎵╁睍浜嗘暟缁勬瀯阃犲櫒Array 锛屾柊澧?涓柟娉曪细Array.of銆丄rray.from銆备笅闱㈠睍寮€鏉ヨ亰銆?/p>
Array.of
Array.of鐢ㄤ簬灏嗗弬鏁颁緷娆¤浆鍖栦负鏁扮粍涓殑涓€椤癸纴铹跺悗杩斿洖杩欎釜鏂版暟缁勶纴钥屼笉绠¤繖涓弬鏁版槸鏁板瓧杩樻槸鍏跺畠銆傚畠鍩烘湰涓娄笌Array鏋勯€犲櫒锷熻兘涓€镊达纴鍞竴鐨勫尯鍒氨鍦ㄥ崟涓暟瀛楀弬鏁扮殑澶勭悊涓娿€傚涓嬶细
Array.of(8.0); // [8]
Array(8.0); // [undefined 脳 8]
|
鍙傛暟涓哄涓纴鎴栧崟涓弬鏁颁笉鏄暟瀛楁椂锛孉rray.of 涓?Array鏋勯€犲櫒绛夊悓銆?/p>
Array.of(8.0, 5); // [8, 5]
Array(8.0, 5); // [8, 5]
听
Array.of( '8' ); // ["8"]
Array( '8' ); // ["8"]
|
锲犳锛岃嫢鏄渶瑕佷娇鐢ㄦ暟缁勫寘瑁瑰厓绱狅纴鎺ㄨ崘浼桦厛浣跨敤Array.of鏂规硶銆?/p>
鐩墠锛屼互涓嬬増链祻瑙埚櫒鎻愪緵浜嗗Array.of鐨勬敮鎸併€?/p>
Chrome | Firefox | Edge | Safari |
---|---|---|---|
45+ | 25+ | 9.0+ |
鍗充娇鍏朵粬鐗堟湰娴忚鍣ㄤ笉鏀寔涔熶笉蹇呮媴蹇冿纴鐢变簬Array.of涓峣rray鏋勯€犲櫒鐨勮繖绉嶉珮搴︾浉浼兼€э纴瀹炵幇涓€涓猵olyfill鍗佸垎绠€鍗曘€傚涓嬶细
if (!Array.of){
听听 Array.of = function (){
听听听听 return Array.prototype.slice.call(arguments);
听听 };
} |
Array.from
璇硶锛欰rray.from(arrayLike[, processingFn[, thisArg]])
Array.from鐨勮璁″埯琛锋槸蹇€熶究鎹风殑鍩轰簬鍏朵粬瀵硅薄鍒涘缓鏂版暟缁勶纴鍑嗙‘鏉ヨ灏辨槸浠庝竴涓被浼兼暟缁勭殑鍙凯浠e璞″垱寤轰竴涓柊鐨勬暟缁勫疄渚嬶纴璇翠汉璇濆氨鏄纴鍙涓€涓璞℃湁杩唬鍣纴Array.from灏辫兘鎶婂畠鍙樻垚涓€涓暟缁勶纸褰撶劧锛屾槸杩斿洖鏂扮殑鏁扮粍锛屼笉鏀瑰彉铡熷璞★级銆?/p>
浠庤娉曚笂鐪嬶纴Array.from鎷ユ湁3涓舰鍙傦纴绗竴涓负绫讳技鏁扮粍鐨勫璞★纴蹇呴€夈€傜浜屼釜涓哄姞宸ュ嚱鏁帮纴鏂扮敓鎴愮殑鏁扮粍浼氱粡杩囱鍑芥暟鐨勫姞宸ュ啀杩斿洖銆傜涓変釜涓篓his浣灭敤鍩燂纴琛ㄧず锷犲伐鍑芥暟鎵ц镞秚his鐨勫€笺€傚悗涓や釜鍙傛暟閮芥槸鍙€夌殑銆傛垜浠潵鐪嬬湅鐢ㄦ硶銆?/p>
var obj = {0: 'a' , 1: 'b' , 2: 'c' , length: 3};
Array.from(obj, function (value, index){
听听 console.log(value, index, this , arguments.length);
听听 return value.repeat(3); //蹇呴』鎸囧畾杩斿洖鍊硷纴钖﹀垯杩斿洖undefined
}, obj); |
鎵ц缁撴灉濡备笅锛?br >
鍙互鐪嫔埌锷犲伐鍑芥暟鐨则his浣灭敤鍩熻obj瀵硅薄鍙栦唬锛屼篃鍙互鐪嫔埌锷犲伐鍑芥暟榛樿鎷ユ湁涓や釜褰㈠弬锛屽垎鍒负杩唬鍣ㄥ綋鍓嶅厓绱犵殑鍊煎拰鍏剁储寮曘€?/p>
娉ㄦ剰锛屼竴镞︿娇鐢ㄥ姞宸ュ嚱鏁帮纴蹇呴』鏄庣‘鎸囧畾杩斿洖鍊硷纴钖﹀垯灏嗛殣寮忚繑锲潆ndefined锛屾渶缁堢敓鎴愮殑鏁扮粍涔熶细鍙樻垚涓€涓彧鍖呭惈鑻ュ共涓猽ndefined鍏幂礌鐨勭┖鏁扮粍銆?/p>
瀹为檯涓婏纴濡傛灉涓嶉渶瑕佹寚瀹歵his锛屽姞宸ュ嚱鏁板畬鍏ㄥ彲浠ユ槸涓€涓澶村嚱鏁般€备笂杩颁唬镰佸彲浠ョ亩鍖栧涓嬶细
Array.from(obj, (value) => value.repeat(3)); |
闄や简涓婅堪obj瀵硅薄浠ュ锛屾嫢链夎凯浠e櫒鐨勫璞¤缮鍖呮嫭杩欎簺锛歋tring锛孲et锛孧ap锛宎rguments 绛夛纴Array.from缁熺粺鍙互澶勭悊銆傚涓嬫墍绀猴细
// String Array.from( 'abc' ); // ["a", "b", "c"]
// Set Array.from( new Set([ 'abc' , 'def' ])); // ["abc", "def"]
// Map Array.from( new Map([[1, 'abc' ], [2, 'def' ]])); // [[1
, 'abc' ], [2, 'def' ]]
// 澶╃敓鐨勭被鏁扮粍瀵硅薄arguments function fn(){
听听 return Array.from(arguments);
} fn(1, 2, 3); // [1, 2, 3]
|
鍒拌繖浣犲彲鑳戒互涓篈rray.from灏辫瀹屼简锛屽疄闄呬笂杩樻湁涓€涓吨瑕佺殑鎵╁睍鍦烘櫙蹇呴』鎻愪笅銆傛瘆濡傝鐢熸垚涓€涓粠0鍒版寚瀹氭暟瀛楃殑鏂版暟缁勶纴Array.from灏卞彲浠ヨ交鏄撶殑锅氩埌銆?/p>
Array.from({length: 10}, (v, i) => i); // [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
|
钖庨溃鎴戜滑灏嗕细鐪嫔埌锛屽埄鐢ㄦ暟缁勭殑keys鏂规硶瀹炵幇涓婅堪锷熻兘锛屽彲鑳借缮瑕佺亩鍗曚竴浜涖€?/p>
鐩墠锛屼互涓嬬増链祻瑙埚櫒鎻愪緵浜嗗Array.from鐨勬敮鎸併€?/p>
Chrome | Firefox | Edge | Opera | Safari |
---|---|---|---|---|
45+ | 32+ | 9.0+ |
Array.isArray
椤惧悕镐濅箟锛孉rray.isArray鐢ㄦ潵鍒ゆ柇涓€涓彉閲忔槸钖︽暟缁勭被鍨嬨€侸S鐨勫急绫诲瀷链哄埗瀵艰嚧鍒ゆ柇鍙橀噺绫诲瀷鏄埯绾у墠绔紑鍙戣€呴溃璇曟椂鐨勫繀钥冮锛屼竴鑸垜閮戒细灏嗗叾浣滀负钥冨疗鍊欓€変汉绗竴棰桡纴铹跺悗鍩轰簬姝ゅ睍寮€銆傚湪ES6鎻愪緵璇ユ柟娉曚箣鍓嶏纴ES5镊冲皯链夊涓?绉嶆柟寮忓垽鏂竴涓€兼槸钖︽暟缁勶细
var a = [];
// 1.鍩轰簬instanceof a instanceof Array;
// 2.鍩轰簬constructor a.constructor === Array; // 3.鍩轰簬Object.prototype.isPrototypeOf Array.prototype.isPrototypeOf(a); // 4.鍩轰簬getPrototypeOf Object.getPrototypeOf(a) === Array.prototype; // 5.鍩轰簬Object.prototype.toString Object.prototype.toString.apply(a) === '[object Array]' ;
|
浠ヤ笂锛岄櫎浜哋bject.prototype.toString澶栵纴鍏跺畠鏂规硶閮戒笉鑳芥纭垽鏂彉閲忕殑绫诲瀷銆?/p>
瑕佺煡阆掳纴浠g爜鐨勮繍琛岀幆澧冨崄鍒嗗鏉傦纴涓€涓彉閲忓彲鑳戒娇鐢ㄦ祽韬В鏁板幓杩锋儜瀹幂殑鍒涢€犺€呫€备笖鐪嬶细
var a = {
听听 __proto__: Array.prototype
}; // 鍒嗗埆鍦ㄦ带鍒跺彴璇曡繍琛屼互涓嬩唬镰?/code> // 1.鍩轰簬instanceof a instanceof Array; // true
// 2.鍩轰簬constructor a.constructor === Array; // true
// 3.鍩轰簬Object.prototype.isPrototypeOf Array.prototype.isPrototypeOf(a); // true
// 4.鍩轰簬getPrototypeOf Object.getPrototypeOf(a) === Array.prototype; // true
|
浠ヤ笂锛?绉嶆柟娉曞皢鍏ㄩ儴杩斿洖true锛屼负浠€涔埚憿锛熸垜浠彧鏄坠锷ㄦ寚瀹氢简镆愪釜瀵硅薄鐨刜_proto__灞炴€т负Array.prototype锛屼究瀵艰嚧浜呜瀵硅薄缁ф圹浜咥rray瀵硅薄锛岃繖绉嶆涓嶈礋璐d换鐨勭户鎵挎柟寮忥纴浣垮缑鍩轰簬缁ф圹鐨勫垽鏂柟妗堢灛闂村湡宕╃摝瑙c€?/p>
涓崭粎濡傛锛屾垜浠缮鐭ラ亾锛孉rray鏄爢鏁版嵁锛屽彉閲忔寚钖戠殑鍙槸瀹幂殑寮旷敤鍦板潃锛屽洜姝ゆ疮涓〉闱㈢殑Array瀵硅薄寮旷敤鐨勫湴鍧€閮芥槸涓崭竴镙风殑銆俰frame涓0鏄庣殑鏁扮粍锛屽畠鐨勬瀯阃犲嚱鏁版槸iframe涓殑Array瀵硅薄銆傚鏋滃湪iframe澹版槑浜嗕竴涓暟缁剎锛屽皢鍏惰祴鍊肩粰鐖堕〉闱㈢殑鍙橀噺y锛岄偅涔埚湪鐖堕〉闱娇鐢▂ instanceof Array 锛岀粨鏋滀竴瀹氭槸false鐨勚€傝€屾渶钖庝竴绉嶈繑锲炵殑鏄瓧绗︿覆锛屼笉浼氩瓨鍦ㄥ紩鐢ㄩ梾棰朴€傚疄闄呬笂锛屽椤甸溃鎴栫郴缁熶箣闂寸殑浜や簰鍙湁瀛楃涓茶兘澶熺晠琛屾棤阒汇€?/p>
閴翠簬涓婅堪鐨勪袱镣瑰师锲狅纴鏁呯玛钥呮帹钻愪娇鐢ㄦ渶钖庝竴绉嶆柟娉曞幓鎾╅溃璇曞畼锛埚埆鎻愭槸鎴戣鐨勶级锛屽鏋滀綘杩树笉淇★纴杩欓噷鎭板ソ链夌瘒鏂囩珷璺熸垜鎸佹湁鐩稿悓鐨勮镣癸细
锲炲埌ES6锛屼娇鐢ˋrray.isArray鍒欓潪甯哥亩鍗曪纴濡备笅锛?a href="https://web.mit.edu/jwalden/www/isArray.html" target="_blank" >Determining with absolute accuracy whether or not a JavaScript object is an array
最后更新:2017-08-19 10:02:35