Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 欧美激情成人,亚洲日本在线观看视频,动漫成人精品一区二区

          整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          一文讀懂javascript中的數(shù)組的創(chuàng)建、讀取和查

          一文讀懂javascript中的數(shù)組的創(chuàng)建、讀取和查找等操作

          、定義數(shù)組添加元素

          在JavaScript中,定義數(shù)組并添加內(nèi)容非常簡(jiǎn)單。以下是一個(gè)基本的示例:

          // 定義一個(gè)空數(shù)組  
          var myArray=[];  
            
          // 添加內(nèi)容到數(shù)組  
          myArray.push('第一項(xiàng)');  
          myArray.push('第二項(xiàng)');  
          myArray.push('第三項(xiàng)');  
            
          // 輸出數(shù)組內(nèi)容  
          console.log(myArray); 
          // 輸出: [ '第一項(xiàng)', '第二項(xiàng)', '第三項(xiàng)' ]

          在這個(gè)例子中,我們首先定義了一個(gè)名為myArray的空數(shù)組。然后,我們使用push方法將三個(gè)字符串元素添加到數(shù)組中。最后,我們使用console.log來(lái)輸出數(shù)組的內(nèi)容。

          另外,你還可以在定義數(shù)組的同時(shí)初始化其內(nèi)容,如下:

          // 定義并初始化數(shù)組  
          var myArray=['第一項(xiàng)', '第二項(xiàng)', '第三項(xiàng)'];  
            
          // 輸出數(shù)組內(nèi)容  
          console.log(myArray); 
          // 輸出: [ '第一項(xiàng)', '第二項(xiàng)', '第三項(xiàng)' ]

          在這個(gè)例子中,我們直接在定義數(shù)組的同時(shí)初始化了它的內(nèi)容。這種方式在你知道數(shù)組初始內(nèi)容的情況下非常有用。

          二、讀取數(shù)組長(zhǎng)度

          在上面數(shù)組的基礎(chǔ)上,我們來(lái)讀取數(shù)組的長(zhǎng)度。以下是一個(gè)基本的示例:

          // 讀取數(shù)組長(zhǎng)度  
          var arrayLength=myArray.length;  
          console.log('數(shù)組長(zhǎng)度:', arrayLength); 
          // 輸出: 數(shù)組長(zhǎng)度: 3  

          在這個(gè)例子中,我們使用myArray.length來(lái)獲取數(shù)組的長(zhǎng)度。

          三、判斷是否為空

          在上面數(shù)組的基礎(chǔ)上,我們來(lái)判斷數(shù)組是否為空。以下是一個(gè)基本的示例:

          // 判斷數(shù)組是否為空  
          var isEmpty=myArray.length===0;  
          console.log('數(shù)組是否為空:', isEmpty); 
          // 輸出: 數(shù)組是否為空: false 

          在這個(gè)例子中,我們通過(guò)比較數(shù)組長(zhǎng)度是否為0來(lái)判斷數(shù)組是否為空。

          四、迭代輸出數(shù)組中的每一個(gè)元素

          在上面數(shù)組的基礎(chǔ)上,我們來(lái)使用forEach迭代輸出數(shù)組中的每一個(gè)元素。以下是一個(gè)基本的示例:

          // 迭代輸出數(shù)組中的每一個(gè)元素  
          myArray.forEach(function(item, index) {  
              console.log('元素:', item, '索引:', index);  
          });  
          // 輸出:  
          // 元素: 第一項(xiàng) 索引: 0  
          // 元素: 第二項(xiàng) 索引: 1  
          // 元素: 第三項(xiàng) 索引: 2  

          在這個(gè)例子中,我們使用forEach方法來(lái)迭代數(shù)組,并輸出每個(gè)元素及其索引。

          另外,我們還可以使用for循環(huán)迭代輸出數(shù)組中的每一個(gè)元素,以下是一個(gè)基本的示例:

          for (var i=0; i < myArray.length; i++) {  
              console.log('元素:', myArray[i], '索引:', i);  
          }
          // 輸出:  
          // 元素: 第一項(xiàng) 索引: 0  
          // 元素: 第二項(xiàng) 索引: 1  
          // 元素: 第三項(xiàng) 索引: 2  

          和for Each迭代結(jié)果是一樣的。但是也有區(qū)別,具體請(qǐng)“使用break退出循環(huán)”章節(jié)。

          五、輸出第一個(gè)元素

          在上面數(shù)組的基礎(chǔ)上,我們來(lái)輸出數(shù)組中的第一個(gè)元素,如下:

          // 獲取并輸出數(shù)組的第一個(gè)元素  
          var firstElement=myArray[0];  
          console.log('第一個(gè)元素:', firstElement); 
          // 輸出: 第一個(gè)元素: 第一項(xiàng)  

          在這個(gè)例子中,我們通過(guò)索引0獲取數(shù)組的第一個(gè)元素。

          六、輸出最后一個(gè)元素

          在上面數(shù)組的基礎(chǔ)上,我們來(lái)輸出數(shù)組中的最后一個(gè)元素,如下:

          // 獲取并輸出數(shù)組的最后一個(gè)元素  
          var lastElement=myArray[myArray.length - 1];  
          console.log('最后一個(gè)元素:', lastElement); 
          // 輸出: 最后一個(gè)元素: 第三項(xiàng)

          在這個(gè)例子中,我們通過(guò)索引myArray.length - 1獲取數(shù)組的最后一個(gè)元素。

          七、使用break退出循環(huán)

          在JavaScript中,forEach循環(huán)不能使用break語(yǔ)句來(lái)提前退出循環(huán)。forEach是數(shù)組的一個(gè)方法,它專(zhuān)門(mén)為迭代數(shù)組的每個(gè)元素而設(shè)計(jì),但不提供像傳統(tǒng)for循環(huán)那樣的退出機(jī)制。

          如果你需要在迭代過(guò)程中提前退出,你可以考慮使用其他循環(huán)結(jié)構(gòu),如for循環(huán)、while循環(huán)或do...while循環(huán),或者使用數(shù)組方法如find、findIndex、some、every等,這些方法會(huì)在滿足某個(gè)條件時(shí)停止執(zhí)行回調(diào)函數(shù)。

          例如,使用for循環(huán)和break:

          for (var i=0; i < myArray.length; i++) {  
              if (/* 某個(gè)條件 */) {  
                  break; // 退出循環(huán)  
              }  
              console.log('元素:', myArray[i], '索引:', i);  
          }

          八、元素查找

          如果你只是想找到滿足某個(gè)條件的第一個(gè)元素,可以使用find方法:

          var foundItem=myArray.find(function(item, index) {  
              if (/* 某個(gè)條件 */) {  
                  return true; // 找到后,find方法會(huì)立即停止執(zhí)行并返回該元素  
              }  
              return false;  
          });  
            
          if (foundItem) {  
              console.log('找到的元素:', foundItem);  
          } else {  
              console.log('未找到滿足條件的元素');  
          }

          在這個(gè)find方法的示例中,一旦回調(diào)函數(shù)返回true,find方法就會(huì)停止執(zhí)行,并返回當(dāng)前元素。如果沒(méi)有元素使回調(diào)函數(shù)返回true,則find方法返回undefined。

          如果你想要獲取滿足條件的元素的索引,可以使用findIndex方法,它的工作方式與find類(lèi)似,但返回的是元素的索引而不是元素本身。

          下面的示例著重來(lái)介紹查找元素索引。

          九、索引查找

          在JavaScript中,如果你想要返回?cái)?shù)組中指定元素的索引,你可以使用數(shù)組的indexOf方法或者findIndex方法。這兩個(gè)方法有不同的用途:

          • indexOf 方法返回在數(shù)組中可以找到一個(gè)給定元素的第一個(gè)索引,如果不存在,則返回-1。
          • findIndex 方法返回?cái)?shù)組中滿足提供的測(cè)試函數(shù)的第一個(gè)元素的索引。否則返回-1。

          下面是使用這兩個(gè)方法返回指定元素索引的示例:

          使用 indexOf 方法:

          var myArray=['第一項(xiàng)', '第二項(xiàng)', '第三項(xiàng)'];  
          var targetElement='第二項(xiàng)';  
          var index=myArray.indexOf(targetElement);  
            
          if (index !==-1) {  
              console.log('元素的索引是:', index); // 輸出: 元素的索引是: 1  
          } else {  
              console.log('元素不在數(shù)組中');  
          }

          使用 findIndex 方法(適用于更復(fù)雜的條件或當(dāng)元素不是原始類(lèi)型時(shí)):

          var myArray=[{ name: '第一項(xiàng)' }, { name: '第二項(xiàng)' }, { name: '第三項(xiàng)' }];  
          var targetElementName='第二項(xiàng)';  
          var index=myArray.findIndex(function(item) {  
              return item.name===targetElementName;  
          });  
            
          if (index !==-1) {  
              console.log('元素的索引是:', index); // 輸出: 元素的索引是: 1  
          } else {  
              console.log('元素不在數(shù)組中');  
          }

          在findIndex的示例中,我們有一個(gè)包含對(duì)象的數(shù)組,我們想要找到name屬性為第二項(xiàng)的對(duì)象的索引。我們通過(guò)提供一個(gè)回調(diào)函數(shù)來(lái)實(shí)現(xiàn)這一點(diǎn),該函數(shù)檢查每個(gè)對(duì)象的name屬性是否匹配目標(biāo)值。

          注意,如果數(shù)組中有多個(gè)相同的元素,indexOf和findIndex都只會(huì)返回第一個(gè)匹配元素的索引。如果你需要找到所有匹配元素的索引,你需要自己實(shí)現(xiàn)一個(gè)循環(huán)來(lái)遍歷數(shù)組并收集索引。

          .定義

          數(shù)組(array)是按次序排列的一組值。每個(gè)值的位置都有編號(hào)(從0開(kāi)始),整個(gè)數(shù)組用方括號(hào)表示。

          var arr=['a', 'b', 'c'];
          

          上面代碼中的a、b、c就構(gòu)成一個(gè)數(shù)組,兩端的方括號(hào)是數(shù)組的標(biāo)志。a是0號(hào)位置,b是1號(hào)位置,c是2號(hào)位置。

          除了在定義時(shí)賦值,數(shù)組也可以先定義后賦值。

          var arr=[];
          arr[0]='a';
          arr[1]='b';
          arr[2]='c';
          

          任何類(lèi)型的數(shù)據(jù),都可以放入數(shù)組。

          var arr=[
           {a: 1},
           [1, 2, 3], function() {return true;}
          ];
          arr[0] 
          // Object {a: 1}
          arr[1] 
          // [1, 2, 3]
          arr[2] 
          // function (){return true;}
          

          上面數(shù)組arr的3個(gè)成員依次是對(duì)象、數(shù)組、函數(shù)。

          如果數(shù)組的元素還是數(shù)組,就形成了多維數(shù)組。

          var a=[[1, 2], [3, 4]];
          a[0][1] 
          // 2
          a[1][1] 
          // 4
          

          2、數(shù)組的本質(zhì)

          本質(zhì)上,數(shù)組屬于一種特殊的對(duì)象。typeof運(yùn)算符會(huì)返回?cái)?shù)組的類(lèi)型是object。

          typeof [1, 2, 3] 
          // "object"
          

          上面代碼表明,typeof運(yùn)算符認(rèn)為數(shù)組的類(lèi)型就是對(duì)象。

          數(shù)組的特殊性體現(xiàn)在,它的鍵名是按次序排列的一組整數(shù)(0,1,2...)。

          var arr=['a', 'b', 'c'];Object.keys(arr)
          // ["0", "1", "2"]
          

          上面代碼中,Object.keys方法返回?cái)?shù)組的所有鍵名??梢钥吹綌?shù)組的鍵名就是整數(shù)0、1、2。

          由于數(shù)組成員的鍵名是固定的(默認(rèn)總是0、1、2...),因此數(shù)組不用為每個(gè)元素指定鍵名,而對(duì)象的每個(gè)成員都必須指定鍵名。

          JavaScript 語(yǔ)言規(guī)定,對(duì)象的鍵名一律為字符串,所以,數(shù)組的鍵名其實(shí)也是字符串。之所以可以用數(shù)值讀取,是因?yàn)榉亲址逆I名會(huì)被轉(zhuǎn)為字符串。

          var arr=['a', 'b', 'c'];
          arr['0'] 
          // 'a'
          arr[0] 
          // 'a'
          

          上面代碼分別用數(shù)值和字符串作為鍵名,結(jié)果都能讀取數(shù)組。原因是數(shù)值鍵名被自動(dòng)轉(zhuǎn)為了字符串。

          注意,這點(diǎn)在賦值時(shí)也成立。如果一個(gè)值總是先轉(zhuǎn)成字符串,再進(jìn)行賦值。

          var a=[];
          a[1.00]=6;
          a[1] // 6
          

          上面代碼中,由于1.00轉(zhuǎn)成字符串是1,所以通過(guò)數(shù)字鍵1可以讀取值。

          上一章說(shuō)過(guò),對(duì)象有兩種讀取成員的方法:點(diǎn)結(jié)構(gòu)(object.key)和方括號(hào)結(jié)構(gòu)(object[key])。但是,對(duì)于數(shù)值的鍵名,不能使用點(diǎn)結(jié)構(gòu)。

          var arr=[1, 2, 3];
          arr.0 // SyntaxError
          

          上面代碼中,arr.0的寫(xiě)法不合法,因?yàn)閱为?dú)的數(shù)值不能作為標(biāo)識(shí)符(identifier)。所以,數(shù)組成員只能用方括號(hào)arr[0]表示(方括號(hào)是運(yùn)算符,可以接受數(shù)值)。

          3、length 屬性

          數(shù)組的length屬性,返回?cái)?shù)組的成員數(shù)量。

          ['a', 'b', 'c'].length // 3
          

          JavaScript 使用一個(gè)32位整數(shù),保存數(shù)組的元素個(gè)數(shù)。這意味著,數(shù)組成員最多只有 4294967295 個(gè)(232 - 1)個(gè),也就是說(shuō)length屬性的最大值就是 4294967295。

          只要是數(shù)組,就一定有l(wèi)ength屬性。該屬性是一個(gè)動(dòng)態(tài)的值,等于鍵名中的最大整數(shù)加上1。

          var arr=['a', 'b'];
          arr.length // 2arr[2]='c';
          arr.length // 3arr[9]='d';
          arr.length // 10arr[1000]='e';
          arr.length // 1001
          

          上面代碼表示,數(shù)組的數(shù)字鍵不需要連續(xù),length屬性的值總是比最大的那個(gè)整數(shù)鍵大1。另外,這也表明數(shù)組是一種動(dòng)態(tài)的數(shù)據(jù)結(jié)構(gòu),可以隨時(shí)增減數(shù)組的成員。

          length屬性是可寫(xiě)的。如果人為設(shè)置一個(gè)小于當(dāng)前成員個(gè)數(shù)的值,該數(shù)組的成員會(huì)自動(dòng)減少到length設(shè)置的值。

          var arr=[ 'a', 'b', 'c' ];
          arr.length // 3arr.length=2;
          arr // ["a", "b"]
          

          上面代碼表示,當(dāng)數(shù)組的length屬性設(shè)為2(即最大的整數(shù)鍵只能是1)那么整數(shù)鍵2(值為c)就已經(jīng)不在數(shù)組中了,被自動(dòng)刪除了。

          清空數(shù)組的一個(gè)有效方法,就是將length屬性設(shè)為0。

          var arr=[ 'a', 'b', 'c' ];
          arr.length=0;
          arr // []
          

          如果人為設(shè)置length大于當(dāng)前元素個(gè)數(shù),則數(shù)組的成員數(shù)量會(huì)增加到這個(gè)值,新增的位置都是空位。

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

          上面代碼表示,當(dāng)length屬性設(shè)為大于數(shù)組個(gè)數(shù)時(shí),讀取新增的位置都會(huì)返回undefined。

          如果人為設(shè)置length為不合法的值,JavaScript 會(huì)報(bào)錯(cuò)。

          // 設(shè)置負(fù)值
          [].length=-1
          // RangeError: Invalid array length
          // 數(shù)組元素個(gè)數(shù)大于等于2的32次方
          [].length=Math.pow(2, 32)
          // RangeError: Invalid array length
          // 設(shè)置字符串
          [].length='abc'
          // RangeError: Invalid array length
          

          值得注意的是,由于數(shù)組本質(zhì)上是一種對(duì)象,所以可以為數(shù)組添加屬性,但是這不影響length屬性的值。

          var a=[];
          a['p']='abc';
          a.length // 0
          a[2.1]='abc';
          a.length // 0
          

          上面代碼將數(shù)組的鍵分別設(shè)為字符串和小數(shù),結(jié)果都不影響length屬性。因?yàn)?,length屬性的值就是等于最大的數(shù)字鍵加1,而這個(gè)數(shù)組沒(méi)有整數(shù)鍵,所以length屬性保持為0。

          如果數(shù)組的鍵名是添加超出范圍的數(shù)值,該鍵名會(huì)自動(dòng)轉(zhuǎn)為字符串。

          var arr=[];
          arr[-1]='a';
          arr[Math.pow(2, 32)]='b';
          arr.length 
          // 0
          arr[-1] 
          // "a"
          arr[4294967296] 
          // "b"
          

          上面代碼中,我們?yōu)閿?shù)組arr添加了兩個(gè)不合法的數(shù)字鍵,結(jié)果length屬性沒(méi)有發(fā)生變化。

          這些數(shù)字鍵都變成了字符串鍵名。最后兩行之所以會(huì)取到值,是因?yàn)槿℃I值時(shí),數(shù)字鍵名會(huì)默認(rèn)轉(zhuǎn)為字符串。

          in 運(yùn)算符

          檢查某個(gè)鍵名是否存在的運(yùn)算符in,適用于對(duì)象,也適用于數(shù)組。

          var arr=[ 'a', 'b', 'c' ];
          2 in arr 
          // true
          '2' in arr 
          // true
          4 in arr 
          // false
          

          上面代碼表明,數(shù)組存在鍵名為2的鍵。由于鍵名都是字符串,所以數(shù)值2會(huì)自動(dòng)轉(zhuǎn)成字符串。

          注意,如果數(shù)組的某個(gè)位置是空位,in運(yùn)算符返回false。

          var arr=[];
          arr[100]='a';
          100 in arr 
          // true
          1 in arr 
          // false
          

          上面代碼中,數(shù)組arr只有一個(gè)成員arr[100],其他位置的鍵名都會(huì)返回false。

          for...in 循環(huán)和數(shù)組的遍歷

          for...in循環(huán)不僅可以遍歷對(duì)象,也可以遍歷數(shù)組,畢竟數(shù)組只是一種特殊對(duì)象。

          var a=[1, 2, 3];for (var i in a) { 
           console.log(a[i]);
          }
           // 1// 2// 3
          

          但是,for...in不僅會(huì)遍歷數(shù)組所有的數(shù)字鍵,還會(huì)遍歷非數(shù)字鍵。

          var a=[1, 2, 3];
          a.foo=true;for (var key in a) { 
          console.log(key);
          }// 0// 1// 2// foo
          

          上面代碼在遍歷數(shù)組時(shí),也遍歷到了非整數(shù)鍵foo。所以,不推薦使用for...in遍歷數(shù)組。

          數(shù)組的遍歷可以考慮使用for循環(huán)或while循環(huán)。

          var a=[1, 2, 3];
          // for循環(huán)
          for(var i=0; 
          i < a.length; i++) { 
          console.log(a[i]);
          }
          // while循環(huán)
          var i=0;
          while (i < a.length) { 
          console.log(a[i]);
           i++;
          }
          var l=a.length;
          while (l--) { 
          console.log(a[l]);
          }
          

          上面代碼是三種遍歷數(shù)組的寫(xiě)法。最后一種寫(xiě)法是逆向遍歷,即從最后一個(gè)元素向第一個(gè)元素遍歷。

          數(shù)組的forEach方法,也可以用來(lái)遍歷數(shù)組,詳見(jiàn)《標(biāo)準(zhǔn)庫(kù)》的 Array 對(duì)象一章。

          var colors=['red', 'green', 'blue'];
          colors.forEach(
          function (color) { 
          console.log(color);
          });
          // red
          // green
          // blue
          

          數(shù)組的空位

          當(dāng)數(shù)組的某個(gè)位置是空元素,即兩個(gè)逗號(hào)之間沒(méi)有任何值,我們稱(chēng)該數(shù)組存在空位(hole)。

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

          上面代碼表明,數(shù)組的空位不影響length屬性。

          需要注意的是,如果最后一個(gè)元素后面有逗號(hào),并不會(huì)產(chǎn)生空位。也就是說(shuō),有沒(méi)有這個(gè)逗號(hào),結(jié)果都是一樣的。

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

          上面代碼中,數(shù)組最后一個(gè)成員后面有一個(gè)逗號(hào),這不影響length屬性的值,與沒(méi)有這個(gè)逗號(hào)時(shí)效果一樣。

          數(shù)組的空位是可以讀取的,返回undefined。

          var a=[, , ,];
          a[1] 
          // undefined
          

          使用delete命令刪除一個(gè)數(shù)組成員,會(huì)形成空位,并且不會(huì)影響length屬性。

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

          上面代碼用delete命令刪除了數(shù)組的第二個(gè)元素,這個(gè)位置就形成了空位,但是對(duì)length屬性沒(méi)有影響。也就是說(shuō),length屬性不過(guò)濾空位。所以,使用length屬性進(jìn)行數(shù)組遍歷,一定要非常小心。

          數(shù)組的某個(gè)位置是空位,與某個(gè)位置是undefined,是不一樣的。如果是空位,使用數(shù)組的forEach方法、for...in結(jié)構(gòu)、以及Object.keys方法進(jìn)行遍歷,空位都會(huì)被跳過(guò)。

          var a=[, , ,];
          a.forEach(function (x, i) { 
          console.log(i + '. ' + x);
          })
          // 不產(chǎn)生任何輸出
          for (var i in a) { 
          console.log(i);
          }
          // 不產(chǎn)生任何輸出
          Object.keys(a)
          // []
          

          如果某個(gè)位置是undefined,遍歷的時(shí)候就不會(huì)被跳過(guò)。

          var a=[undefined, undefined, undefined];
          a.forEach(function (x, i) { 
          console.log(i + '. ' + x);
          });
          // 0. undefined
          // 1. undefined
          // 2. undefined
          for (var i in a) { 
          console.log(i);
          }// 0
          // 1
          // 2
          Object.keys(a)
          // ['0', '1', '2']
          

          這就是說(shuō),空位就是數(shù)組沒(méi)有這個(gè)元素,所以不會(huì)被遍歷到,而undefined則表示數(shù)組有這個(gè)元素,值是undefined,所以遍歷不會(huì)跳過(guò)。

          類(lèi)似數(shù)組的對(duì)象

          如果一個(gè)對(duì)象的所有鍵名都是正整數(shù)或零,并且有l(wèi)ength屬性,那么這個(gè)對(duì)象就很像數(shù)組,語(yǔ)法上稱(chēng)為“類(lèi)似數(shù)組的對(duì)象”(array-like object)。

          var obj={ 
          0: 'a', 1: 'b', 2: 'c', 
          length: 3};
          obj[0] 
          // 'a'
          obj[1] 
          // 'b'
          obj.length 
          // 3
          obj.push('d') 
          // TypeError: obj.push is not a function
          

          上面代碼中,對(duì)象obj就是一個(gè)類(lèi)似數(shù)組的對(duì)象。但是,“類(lèi)似數(shù)組的對(duì)象”并不是數(shù)組,因?yàn)樗鼈儾痪邆鋽?shù)組特有的方法。對(duì)象obj沒(méi)有數(shù)組的push方法,使用該方法就會(huì)報(bào)錯(cuò)。

          “類(lèi)似數(shù)組的對(duì)象”的根本特征,就是具有l(wèi)ength屬性。只要有l(wèi)ength屬性,就可以認(rèn)為這個(gè)對(duì)象類(lèi)似于數(shù)組。但是有一個(gè)問(wèn)題,這種length屬性不是動(dòng)態(tài)值,不會(huì)隨著成員的變化而變化。

          var obj={ length: 0};
          obj[3]='d';
          obj.length // 0
          

          上面代碼為對(duì)象obj添加了一個(gè)數(shù)字鍵,但是length屬性沒(méi)變。這就說(shuō)明了obj不是數(shù)組。

          典型的“類(lèi)似數(shù)組的對(duì)象”是函數(shù)的arguments對(duì)象,以及大多數(shù) DOM 元素集,還有字符串。

          // arguments對(duì)象
          function args() { 
          return arguments }
          var arrayLike=args('a', 'b');
          arrayLike[0] 
          // 'a'
          arrayLike.length 
          // 2
          arrayLike instanceof Array 
          // false// DOM元素集
          var elts=document.getElementsByTagName('h3');
          elts.length // 3
          elts instanceof Array 
          // false// 字符串
          'abc'[1] // 'b'
          'abc'.length 
          // 3
          'abc' instanceof Array 
          // false
          

          上面代碼包含三個(gè)例子,它們都不是數(shù)組(instanceof運(yùn)算符返回false),但是看上去都非常像數(shù)組。

          數(shù)組的slice方法可以將“類(lèi)似數(shù)組的對(duì)象”變成真正的數(shù)組。

          var arr=Array.prototype.slice.call(arrayLike);
          

          除了轉(zhuǎn)為真正的數(shù)組,“類(lèi)似數(shù)組的對(duì)象”還有一個(gè)辦法可以使用數(shù)組的方法,就是通過(guò)call()把數(shù)組的方法放到對(duì)象上面。

          function print(value, index) { 
          console.log(index + ' : ' + value);
          }
          Array.prototype.forEach.call(arrayLike, print);
          

          上面代碼中,arrayLike代表一個(gè)類(lèi)似數(shù)組的對(duì)象,本來(lái)是不可以使用數(shù)組的forEach()方法的,但是通過(guò)call(),可以把forEach()嫁接到arrayLike上面調(diào)用。

          下面的例子就是通過(guò)這種方法,在arguments對(duì)象上面調(diào)用forEach方法。

          // forEach 方法
          function logArgs() { 
          Array.prototype.forEach.call(
          arguments, function (elem, i) { 
          console.log(i + '. ' + elem);
           });
          }
          // 等同于 for 循環(huán)
          function logArgs() { for (var i=0; 
          i < arguments.length; i++) { 
          console.log(i + '. ' + arguments[i]);
           }
          }
          

          字符串也是類(lèi)似數(shù)組的對(duì)象,所以也可以用Array.prototype.forEach.call遍歷。

          Array.prototype.forEach.call('abc', 
          function (chr) { 
          console.log(chr);
          });
          // a
          // b
          // c
          

          注意,這種方法比直接使用數(shù)組原生的forEach要慢,所以最好還是先將“類(lèi)似數(shù)組的對(duì)象”轉(zhuǎn)為真正的數(shù)組,然后再直接調(diào)用數(shù)組的forEach方法。

          var arr=Array.prototype.slice.call('abc');
          arr.forEach(function (chr) { 
          console.log(chr);
          });
          // a
          // b
          // c
          

          推薦閱讀:

          「JavaScript 教程」數(shù)據(jù)類(lèi)型-對(duì)象

          js之a(chǎn)rguments詳解

          JavaScript 2018 中即將迎來(lái)的新功能

          詳解 js 閉包(圖文版)

          CSS 3D 的魅力(二)

          組對(duì)象定于與值的讀寫(xiě)

          面向?qū)ο蟪绦蛟O(shè)計(jì)(OOP),程序設(shè)計(jì)語(yǔ)言中,對(duì)象是最基本與最核心的組成部分。對(duì)象是程序設(shè)計(jì)語(yǔ)言對(duì)現(xiàn)實(shí)世界的抽象。簡(jiǎn)單理解對(duì)象是由屬性與方法所組成的一類(lèi)特殊結(jié)構(gòu)體。數(shù)組是JavaScript提供的基本內(nèi)置對(duì)象之一,本文主要介紹數(shù)組對(duì)象的定義與數(shù)組元素的讀寫(xiě)與訪問(wèn)。


          數(shù)組對(duì)象基本概念

          在程序設(shè)計(jì)語(yǔ)言中,數(shù)組是一類(lèi)特殊的數(shù)據(jù)結(jié)構(gòu),可以稱(chēng)為數(shù)組數(shù)據(jù)結(jié)構(gòu)(Array Data Structure)。JavaScript數(shù)組是由一組具有共同數(shù)據(jù)類(lèi)型(或不同)的元素所組成,在計(jì)算機(jī)內(nèi)存中使用連續(xù)地址空間進(jìn)行存儲(chǔ)的結(jié)構(gòu)。數(shù)據(jù)基本結(jié)構(gòu)描述如下圖所示:

          數(shù)組基本概念

          數(shù)組基本概念描述如上圖所示,在數(shù)組元素訪問(wèn)時(shí)我們可以通過(guò)其索引實(shí)現(xiàn)對(duì)元素進(jìn)行訪問(wèn)。索引格式為數(shù)組名稱(chēng)[下標(biāo)]形式。如arr[0]可以訪問(wèn)arr數(shù)組第一個(gè)元素。強(qiáng)調(diào):默認(rèn)情況下其索引從0開(kāi)始編號(hào)。


          數(shù)組創(chuàng)建

          JavaScript提供多種途徑實(shí)現(xiàn)數(shù)組的創(chuàng)建,主要形式包括三種,分別為變量賦值形式、new實(shí)例化array對(duì)象形式及key:value存儲(chǔ)形式?;緞?chuàng)建語(yǔ)法描述如下:

          1、變量賦值形式

          賦值形式定義數(shù)組

          變量賦值形式定義如上圖所示,需要注意在賦值時(shí)需要使用[]方括號(hào)表示對(duì)數(shù)組元素進(jìn)行賦值。上圖中我們定義了一個(gè)手機(jī)telphone數(shù)組,該數(shù)組存儲(chǔ)的元素分別是蘋(píng)果手機(jī)、華為手機(jī)、小米手機(jī)三個(gè)字符串。

          2、new實(shí)例化對(duì)象形式

          JavaScript數(shù)組是JavaScript基本內(nèi)置對(duì)象之一,從對(duì)象角度考慮,可以通過(guò)new操作符進(jìn)行實(shí)例化操作?;菊Z(yǔ)法與示例如下:

          new操作符定義數(shù)組

          3、索引+值定義形式

          索引加值定義形式也可以理解為key+value形式定義數(shù)組。該方法與第一種方法基本一致,只是該變量了賦值定義時(shí)默認(rèn)生成的索引號(hào),由使用者自行定義索引下標(biāo)號(hào)。注意此處使用{}花括號(hào)?;菊Z(yǔ)法描述如下:

          索引:值形式構(gòu)造數(shù)組

          使用如上方法定義數(shù)組時(shí),我們可以使用索引名稱(chēng)獲取對(duì)應(yīng)的數(shù)組元素,如telphone.iphone獲取蘋(píng)果手機(jī)值。


          數(shù)組元素訪問(wèn)

          數(shù)組元素訪問(wèn)可以通過(guò)變量名加索引號(hào)實(shí)現(xiàn)對(duì)對(duì)應(yīng)存儲(chǔ)空間中值的訪問(wèn),需要注意,對(duì)應(yīng)默認(rèn)索引的數(shù)組我們可以使用變量名.[ 下標(biāo)]獲取值。對(duì)于自定義索引的我們可以使用變量名.索引名獲取值。數(shù)組元素訪問(wèn)使用示例如下:

          數(shù)組元素訪問(wèn)


          本頭條號(hào)長(zhǎng)期關(guān)注編程資訊分享;編程課程、素材、代碼分享及編程培訓(xùn)。如果您對(duì)以上方面有興趣或代碼錯(cuò)誤、建議與意見(jiàn),可在評(píng)論區(qū)回復(fù)。更多程序設(shè)計(jì)相關(guān)教程及實(shí)例分享,期待大家關(guān)注與閱讀!JavaScript基礎(chǔ)教程系列教程鏈接如下:

          JavaScript基礎(chǔ)教程(七)函數(shù)的編寫(xiě)與使用

          JavaScript基礎(chǔ)教程(六)流程控制之循環(huán)語(yǔ)句

          JavaScript基礎(chǔ)教程(五)流程控制之條件語(yǔ)句


          主站蜘蛛池模板: 老熟女高潮一区二区三区| 国产吧一区在线视频| 国产AV午夜精品一区二区入口 | 一区二区三区视频在线| 午夜精品一区二区三区在线观看| 熟妇人妻AV无码一区二区三区| 曰韩精品无码一区二区三区| 视频一区精品自拍| 亚洲午夜精品一区二区麻豆| 国产精品制服丝袜一区| 91视频国产一区| 欧美激情一区二区三区成人| 爱爱帝国亚洲一区二区三区| 动漫精品专区一区二区三区不卡| 国产传媒一区二区三区呀| 亚洲av无码一区二区三区不卡| 亚洲午夜精品一区二区公牛电影院 | 无码人妻精品一区二区三区99性 | 久久精品一区二区三区AV| 国产午夜精品片一区二区三区| 日韩精品中文字幕视频一区| 午夜视频一区二区三区| 久久久99精品一区二区| 夜夜嗨AV一区二区三区| 国产乱码一区二区三区| 在线日韩麻豆一区| 成人无码AV一区二区| 精品无码av一区二区三区| 无码一区二区三区在线| 在线不卡一区二区三区日韩| 国产婷婷一区二区三区| 精品国产日韩一区三区| 在线观看国产一区二三区| 日韩久久精品一区二区三区 | 国产在线无码视频一区| 久久毛片免费看一区二区三区| 上原亚衣一区二区在线观看| 国产婷婷色一区二区三区深爱网| 亚洲第一区视频在线观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 波多野结衣中文一区|