閱讀562 返回首頁    go 阿裏雲 go 技術社區[雲棲]


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 >jsapi1.png
鍙互鐪嬪埌鍔犲伐鍑芥暟鐨則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

  上一篇:go  2017年最新阿裏雲邀請碼免費放送
  下一篇:go  Docker企業版17.06探秘