本文實(shí)例講述了JavaScript學(xué)習(xí)筆記之?dāng)?shù)組基本操作。分享給大家供大家參考,具體如下:

公司主營業(yè)務(wù):網(wǎng)站設(shè)計(jì)、成都網(wǎng)站制作、移動(dòng)網(wǎng)站開發(fā)等業(yè)務(wù)。幫助企業(yè)客戶真正實(shí)現(xiàn)互聯(lián)網(wǎng)宣傳,提高企業(yè)的競爭能力。創(chuàng)新互聯(lián)公司是一支青春激揚(yáng)、勤奮敬業(yè)、活力青春激揚(yáng)、勤奮敬業(yè)、活力澎湃、和諧高效的團(tuán)隊(duì)。公司秉承以“開放、自由、嚴(yán)謹(jǐn)、自律”為核心的企業(yè)文化,感謝他們對(duì)我們的高要求,感謝他們從不同領(lǐng)域給我們帶來的挑戰(zhàn),讓我們激情的團(tuán)隊(duì)有機(jī)會(huì)用頭腦與智慧不斷的給客戶帶來驚喜。創(chuàng)新互聯(lián)公司推出碑林免費(fèi)做網(wǎng)站回饋大家。
一、數(shù)組定義
1、定義
vara=[1,2,3]
vara=newArray(1,2,3);
2、長度
返回長度
script
vara=[1,2,3,4,5,6];
alert(a.length);
/script
設(shè)置長度
script
vara=[1,2,3,4,5,6];
a.length=2;
alert(a);
/script
二、數(shù)組連接
script
vara=[1,2,3];
varb=[4,5,6];
alert(a.concat(b));
alert(b.concat(a));
/script
三、數(shù)組排序
sort()函數(shù)
默認(rèn)情況是把數(shù)組元素按字符串排序
例子
01
script
vararr=['float','width','alpha','zoom','left'];
arr.sort();
alert(arr);
/script
例子02
vararr=[12,8,99,19,112];
arr.sort();
alert(arr);
例子03
sort()函數(shù)的改進(jìn)
vararr=[12,8,99,19,112];
arr.sort(function(n1,n2){
returnn1-n2;
});
alert(arr);
四、數(shù)組連接
1、兩個(gè)數(shù)組間的連接:contact()
script
vara=[1,2,3];
varb=[4,5,6];
alert(a.concat(b));
alert(b.concat(a));
/script
2、數(shù)組元素間的連接:join()
script
vararr=[1,2,3,4];
alert(arr.join('--p'));
/script
五、數(shù)組元素添加、刪除
1、數(shù)組尾部的添加、刪除
尾部添加:push(value)
例子01
script
vara=[1,2,3];
a.push(4);
alert(a);
/script
尾部刪除:pop()
例子02
script
vara=[1,2,3];
a.pop();
alert(a);
/script
2、數(shù)組頭部的添加、刪除
頭部添加
unshift(value)
例子01
script
vararr=[1,2,3];
arr.unshift(0)
alert(arr);
/script
頭部刪除:shift()
例子02
script
vararr=[1,2,3];
arr.shift();
alert(arr);
/script
3、數(shù)組------splice()
刪除數(shù)據(jù)
例子01
script
vararr=[1,2,3,4,5,6];
//splice(起點(diǎn),長度)
arr.splice(2,3);
alert(arr);
/script
插入數(shù)據(jù)
例子02
script
vararr=[1,2,3,4,5,6];
//插入數(shù)據(jù)splice(起點(diǎn),長度,元素)
arr.splice(2,0,'a','b','c');
alert(arr);
/script
替換數(shù)據(jù)
例子02
script
vararr=[1,2,3,4,5,6];
//替換數(shù)據(jù)
arr.splice(2,2,'a','b');
alert(arr);
/script
感興趣的朋友可以使用在線HTML/CSS/JavaScript代碼運(yùn)行工具:測試上述代碼運(yùn)行結(jié)果。
更多關(guān)于JavaScript相關(guān)內(nèi)容還可查看本站專題:《JavaScript數(shù)組操作技巧總結(jié)》、《JavaScript字符與字符串操作技巧總結(jié)》、《JavaScript遍歷算法與技巧總結(jié)》、《JavaScript排序算法總結(jié)》、《JavaScript查找算法技巧總結(jié)》、《JavaScript數(shù)學(xué)運(yùn)算用法總結(jié)》、《JavaScript數(shù)據(jù)結(jié)構(gòu)與算法技巧總結(jié)》及《JavaScript錯(cuò)誤與調(diào)試技巧總結(jié)》
希望本文所述對(duì)大家JavaScript程序設(shè)計(jì)有所幫助。
您可能感興趣的文章:js數(shù)組與字符串的相互轉(zhuǎn)換方法js刪除數(shù)組元素、清空數(shù)組的簡單方法(必看)js數(shù)組循環(huán)遍歷數(shù)組內(nèi)所有元素的方法JS
array
數(shù)組詳解js數(shù)組去重的三種常用方法總結(jié)JavaScript從數(shù)組中刪除指定值元素的方法JS數(shù)組的遍歷方式for循環(huán)與for...in向JavaScript的數(shù)組中添加元素的方法小結(jié)JS刪除數(shù)組里的某個(gè)元素方法javascript
數(shù)組的定義和數(shù)組的長度Js數(shù)組的操作push,pop,shift,unshift等方法詳細(xì)介紹
不知道,大家對(duì)語言中變量的“聲明”與“定義”是怎么理解的,
我的理解如下:
“聲明”變量,只是僅僅聲明,而“定義”變量,指聲明了,并且賦值了。
例如:
復(fù)制代碼
代碼如下:
var
name;//只是聲明
var
num
=
11;//聲明,并且賦值,即定義了
var
password
=
"yangjiang";//聲明,并且賦值,即定義了
下面是幾點(diǎn)總結(jié):
變量的作用域:全局的和局部的。(注意:如果嘗試讀取一個(gè)未聲明的變量的值,javascript會(huì)生成一個(gè)錯(cuò)誤)
第一點(diǎn):在都使用var關(guān)鍵字修飾變量的情況下,如果給一個(gè)局部變量或函數(shù)的參數(shù)聲明的名字與某個(gè)全局變量的名字相同,
那么就有效地隱藏了這個(gè)全局變量。
例如:
復(fù)制代碼
代碼如下:
var
scope1
=
"global";//var修飾
function
checksScope(){
var
scope1
=
"local";//var修飾
document.write(scope1);
}checksScope();//local
第二點(diǎn):如果嘗試給一個(gè)未用
var
關(guān)鍵字聲明的變量,那么,隱式聲明的變量總是被創(chuàng)建為全局變量,即使
該變量只在一個(gè)函數(shù)體內(nèi)使用(只有該函數(shù)運(yùn)行了,才會(huì)發(fā)生作用),注意不支持函數(shù)嵌套的情形。
例如:
復(fù)制代碼
代碼如下:
scope2
=
"globalAAAAA";//沒有使用var修飾(js會(huì)默認(rèn)將其聲明為全局變量)
function
checkScopeA(){
scope2
=
"localAAAAA";//沒有使用var修飾(js會(huì)默認(rèn)將其聲明為全局變量)
document.write("br/"+scope2);
myscope
=
"myLocalAAAAA";//沒有使用var修飾(js會(huì)默認(rèn)將其聲明為全局變量)
document.write(","+myscope);
}
checkScopeA();//localAAAAA,myLocalAAAAA
*A
document.write("br/"+scope2);//localAAAAA
*B
document.write("br/"+myscope);//myLocalAAAAA
*C
如果將上面的例子中的
*A處的代碼注釋掉,
例如:
復(fù)制代碼
代碼如下:
scope2
=
"globalAAAAA";//沒有使用var修飾(js會(huì)默認(rèn)將其聲明為全局變量)
function
checkScopeA(){
scope2
=
"localAAAAA";//沒有使用var修飾(js會(huì)默認(rèn)將其聲明為全局變量)
document.write("br/"+scope2);
myscope
=
"myLocalAAAAA";//沒有使用var修飾(js會(huì)默認(rèn)將其聲明為全局變量)
document.write(","+myscope);
}
//checkScopeA();
*A
document.write("br/"+scope2);//globalAAAAA
*B
document.write("br/"+myscope);//發(fā)生錯(cuò)誤
*C
因?yàn)楹瘮?shù)checkScopeA沒有執(zhí)行,所以
*B處輸出為globalAAAAA;
因?yàn)楹瘮?shù)checkScopeA沒有執(zhí)行,所以變量myscope沒有聲明,如果嘗試讀取一個(gè)未聲明的變量,會(huì)發(fā)生錯(cuò)誤。
第三點(diǎn):
在javascript中,函數(shù)的定義是可以嵌套的。由于
每個(gè)函數(shù)都有它自己的局部作用域,所以有可能出現(xiàn)幾個(gè)局部作用域的嵌套層。
例如:
復(fù)制代碼
代碼如下:
var
scope3
=
"global
scope";
//定義了一個(gè)全局變量
function
checkScopeB(){
var
scope3
=
"local
scope";
//定義了一個(gè)局部變量,覆蓋了全局變量scope3
function
nested(){
var
scope3
=
"nested
scope";
//在函數(shù)的函數(shù)的內(nèi)部,定義了一個(gè)局部變量
document.write("br/"+scope3);
//nested
scope
}
nested();
}
checkScopeB();//nested
scope
第四點(diǎn):
在javascript中,沒有塊級(jí)作用域,函數(shù)中聲明的所有變量,無論是在哪里聲明的,在整個(gè)函數(shù)中它們都是有聲明的。
在javascript中,沒有塊級(jí)作用域,函數(shù)中定義的所有變量,無論是在哪里定義的,在整個(gè)函數(shù)中它們都是有定義的。
例如:
復(fù)制代碼
代碼如下:
function
test(o){//根據(jù)以上的說明:此函數(shù)中的i,j,k三個(gè)變量的作用域是相同的。
var
i
=
0;
//變量
i
在整個(gè)函數(shù)中都有定義
if(typeof
o
==
"object"){
var
j
=
;
//變量
j
在整個(gè)函數(shù)中都有定義,而不僅僅是在
if
語句塊
for(var
k=0;k10;k++){//變量
k
在整個(gè)函數(shù)中都有定義,而不僅僅是在
if
語句塊
document.write("br/k的值為:"+k);
}
document.write("br/for循環(huán)外k的值:"+k);//此時(shí)的
k
仍然被定義了,k=10
}
document.write("br/j的值:"+j);
//變量
j
被聲明了,但可能沒有被初始化
因?yàn)榭赡芡瘮?shù)中
傳入的參數(shù)
不是對(duì)象
,if語句塊不會(huì)執(zhí)行
}
下面通過兩種方式調(diào)用此函數(shù):
方式一:傳入對(duì)象
test({});//輸出結(jié)果:上例中的注釋
方式二:什么都不傳
test();//輸出結(jié)果:j的值:undefined
想不明白的是,在第二種方式中的輸出結(jié)果,為什么會(huì)是
undefined。我當(dāng)時(shí)猜的是:j的值:0
后來,這本書上面說:
由于局部變量在整個(gè)函數(shù)體內(nèi)都是有聲明(或定義)的,這就意味著在整個(gè)函數(shù)體中都隱藏了同名的全局
變量。雖然
局部變量在整個(gè)函數(shù)體內(nèi)中都是有聲明(或定義)的,但是在執(zhí)行var語句之前,它是不會(huì)被初始化的。
這樣的話,上面的方式二調(diào)用的輸出結(jié)果,就比較好解釋了,由于變量j在整個(gè)函數(shù)中都有定義,而又由于傳入函數(shù)的參數(shù)為空,所以函數(shù)體中的if語句不會(huì)執(zhí)行,從而使得j的值為undefined.(這是我參照上面書上說的那句話的理解)
下面的例子,更好的說明:
復(fù)制代碼
代碼如下:
var
sssss
=
"全局變量";
function
f(){
document.write("br/"+sssss);//輸出:undefined
而不是輸出"全局變量"
var
sssss
=
"局部變量";
document.write("br/"+sssss);//輸出:局部變量
}
一、語法
delete后面的表達(dá)式必須給出一個(gè)屬性的引用,比如
var
o
=
{a:1};
delete
o.a;
//此處o.a是對(duì)象o的屬性a的引用
只有在with語句里才能使用單獨(dú)的屬性名
復(fù)制代碼
代碼如下:
with(o){
delete
a;
}
二、delete的返回值
delete是普通運(yùn)算符,會(huì)返回true或false。規(guī)則為:當(dāng)被delete的對(duì)象的屬性存在并且不能被刪除時(shí)
返回false,否則返回true。
這里的一個(gè)特點(diǎn)就是,對(duì)象屬性不存在時(shí)也返回true,所以返回值并非完全等同于刪除成功與否。
復(fù)制代碼
代碼如下:
var
o
=
{a:1};
delete
o.a;
//返回true
var
b
=
2;
delete
b;//返回false,ECMA規(guī)則約定:使用var和function聲明的變量不可以被delete
三、哪些情況下不允許delete
上例提到的var和function聲明的變量不可以被delete,但隱式聲明可以被刪除
復(fù)制代碼
代碼如下:
function
c(){return
12;}
delete
c;//返回false
d
=
function(){return
12;}
delete
d;//返回true
不能delete從原型鏈上繼承的屬性,但可以刪除原型鏈上的屬性
復(fù)制代碼
代碼如下:
function
Foo(){}
Foo.prototype.bar
=
42;
var
foo
=
new
Foo();
delete
foo.bar;
//
返回true,但并沒有起作用
alert(foo.bar);
//
alerts
42,
屬性是繼承的
delete
Foo.prototype.bar;
//
在原型上刪除屬性bar
alert(foo.bar);
//
alerts
"undefined",
屬性已經(jīng)不存在,無法被繼承
四、特例
復(fù)制代碼
代碼如下:
eval執(zhí)行的代碼中如有通過var和function聲明的變量,可以被delete
eval("var
a=1");
delete
a;
alert(a);
//報(bào)未定義錯(cuò)誤
如果聲明是在eval執(zhí)行代碼中的閉包內(nèi)進(jìn)行的,則變量不能被delete
eval("(function(){var
a=1;delete
a;
return
a;})()");//1
五、delete
數(shù)組元素
從數(shù)組中delete其元素并不會(huì)影響數(shù)組的長度
復(fù)制代碼
代碼如下:
var
arr
=
['yuyin','suhuan','baby'];
delete
arr[0];
alert(arr.length);//alert
3
被delete的鍵值已經(jīng)不屬于數(shù)組,但卻還是可以被訪問,其值為undefined。
復(fù)制代碼
代碼如下:
var
arr
=
['yuyin','suhuan','baby'];
delete
arr[0];
in
arr;
//
false
alert(arr[0]);//undefined
arr[0]
===
undefined;//true
對(duì)比直接將鍵值賦值undefined
復(fù)制代碼
代碼如下:
var
arr
=
['yuyin','suhuan','baby'];
arr[0]
=
undefined;
in
arr;
//
true
alert(arr[0]);//undefined
arr[0]
===
undefined;//true
可以看出delete
操作只是將鍵值這個(gè)屬性從數(shù)組中刪除了,數(shù)組本身也是對(duì)象,這個(gè)情況好理解的。如果需要保留鍵值,可以用undefined賦值。
構(gòu)造函數(shù)
new
Object()
new
Object(value)
參數(shù)
value
可選的參數(shù),聲明了要轉(zhuǎn)換成Number對(duì)象、Boolean對(duì)象或String對(duì)象的原始值(即數(shù)字、布爾值或字符串)。JavaScript
1.1之前的版本和ECMAScript
Vl不支持該對(duì)象。
返回值
如果沒有給構(gòu)造函數(shù)傳遞value參數(shù),那么它將返回一個(gè)
新創(chuàng)建的Object實(shí)例。如果指定了原始的value參數(shù),構(gòu)造函數(shù)將創(chuàng)建并返回原始值的包裝對(duì)象,即Number對(duì)象、Boolean對(duì)象或
String對(duì)象。當(dāng)不使用new運(yùn)算符,將Object()構(gòu)造函數(shù)作為函數(shù)調(diào)用時(shí),它的行為與使用new運(yùn)算符時(shí)一樣。
屬性
constructor
對(duì)一個(gè)JavaScript函數(shù)的引用,該函數(shù)是對(duì)象的構(gòu)造函數(shù)
方法
1.hasOwnProperty(
)
檢查對(duì)象是否有局部定義的(非繼承的)、具有特定名字的屬性。
復(fù)制代碼
代碼如下:
script
type="text/javascript"
var
o
=
new
Object();
o.name="Tom";
alert(o.hasOwnProperty("name"));
//true
alert(o.hasOwnProperty("age"));
//false
/script
2.isPrototypeOf()
語法
object.isPrototypeOf(o)
參數(shù)
o
任意對(duì)象。
返回值
如果object是O的原型,則返回true。如果o不是對(duì)象,或者object不是o的原
型,則返回false。
描述
JavaScript對(duì)象繼承了原型對(duì)象的屬性。一個(gè)對(duì)象的原型是通過用于創(chuàng)建并初始化該對(duì)象的構(gòu)造函數(shù)的prototype屬性引用的。isPrototypeOf()方法提供了判斷一個(gè)對(duì)象是否是另一個(gè)對(duì)象原型的方法。該方法可以用于確定對(duì)象的
類。
示例
復(fù)制代碼
代碼如下:
var
o
=
new
Object(
);
//
創(chuàng)建一個(gè)對(duì)象
Object.prototype.isPrototypeOf(o)
//
true:
o
是一個(gè)對(duì)象
Function.prototype.isPrototypeOf(o.toString);
//
true:
toString
是一個(gè)函數(shù)
Array.prototype.isPrototypeOf([1,2,3]);
//
true:
[1,2,3]
是一個(gè)數(shù)組
//下面是執(zhí)行同樣測試的另一種方法
(o.constructor
==
Object);
//
true:
o
was
created
with
Object(
)
constructor
(o.toString.constructor
==
Function);
//
true:
o.toString
is
a
function
/原型則對(duì)象本身于原型對(duì)象。下面的調(diào)用返回true
//說明函數(shù)繼
Function.prototype和Object.prototyp屬性.
Object.prototype.isPrototypeOf(Function.prototype);
3.ProertyIsEnumerable()
語法
object.propertyIsEnumerable(propname)
參數(shù)
propname
一個(gè)字符串,包含object原型的名字。
返回值
如果object具有名為propname的非繼承屬性,而且該屬性是可枚舉的(即用for/in循環(huán)可以枚舉出它),則返回true。
描述
用for/in語句可以遍歷一個(gè)對(duì)象“可枚舉”的屬性。但并非—個(gè)對(duì)象的所有屬性都是可枚舉的,通過JavaScript代碼添加到對(duì)象的屬性是可枚舉的,而內(nèi)部對(duì)象的預(yù)定義屬性(如方法)通常是不可枚舉的。propertylsEnumerable()方法提供了區(qū)分可枚舉屬性和不可枚舉屬性的方法。但要注意,ECMAScript標(biāo)準(zhǔn)規(guī)定,propertyIsEnumerable()方法不檢測原型鏈,這意味著它只適用于對(duì)象的局部屬性,不能檢測繼承屬性的可枚舉性。
示例
復(fù)制代碼
代碼如下:
var
o
=
new
Object(
);
//
創(chuàng)建一個(gè)對(duì)象
o.x
=
3.14;
//
定義—個(gè)屬性
o.propertyIsEnumerable("x");
//
true屬性x是局部的、可枚舉的
o.propertyIsEnumerable("y");
//false:o沒有屬性y
o.propertyIsEnumerable("toString");
//false:toStrlng屬性是繼承的
Object.prototype.propertyIsEnumerable("toString");
//
false:
枚舉的
Bug
當(dāng)標(biāo)準(zhǔn)限制propertylsEnumerable()方法只能檢測非繼承屬性時(shí),明顯是錯(cuò)的。
Internet
Explorer
5.5按標(biāo)準(zhǔn)實(shí)現(xiàn)了該方法。Nestacpe
6.0實(shí)現(xiàn)的propertyIsEnumerable()方法考慮了原型鏈。雖然這種方法可取,但它與標(biāo)準(zhǔn)沖突,所以Netscape
6.1修改了它,以便與IE
5.5匹配。由于標(biāo)準(zhǔn)中有這個(gè)錯(cuò)誤,因此該方法不是那么有用。
復(fù)制代碼
代碼如下:
script
var
obj
=
new
Object();
obj.title
=
'aaa';
obj.funb
=
function(a,
b)
{
alert(a+b);
}
alert(obj.title);
obj.funb(1,2);
/script
這里一種方法
******************************
復(fù)制代碼
代碼如下:
script
language="javascript"
function
object(value,a,b){
this.title
=
value;
this.funb
=
function(){
this.a
=
a;
this.b
=
b;
alert(a+b);
}
}
var
obj
=
new
object("aaa",1,2);
alert(obj.title);
obj.funb();
//這里為對(duì)象添加新的方法
object.prototype.name
=
"123456";
alert(obj.name);
/script
這是另一種方法
網(wǎng)頁名稱:javascript學(xué)習(xí)筆記,javascript總結(jié)
文章網(wǎng)址:http://chinadenli.net/article48/dsephhp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)網(wǎng)站制作、小程序開發(fā)、網(wǎng)站營銷、網(wǎng)站維護(hù)、面包屑導(dǎo)航、App開發(fā)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)