變量
使用var關(guān)鍵字進(jìn)行變量的聲明,聲明的同時也可以進(jìn)行賦值短绸。變量的聲明只能有一次车吹,但賦值可以有多次。如果只聲明變量醋闭,但是變量沒有被賦值窄驹,此時變量的值為undefined。
JavaScript變量的類型取決于右側(cè)的對象证逻。
var variable_name1 = 5;
var variable_name2 = 5.3;
var variable_name3 = false;
var variable_name4 = 'zhangsan';
輸出:
java: System.out.println();
javascript: console.log(); alert();
變量的作用域
JavaScript沒有塊級作用域
java:
if(true) {
int a = 1;
}
System.out.println(a); // 編譯錯誤乐埠,超出作用域
javascript:
if(true){
var a = 1;
}
console.log(a); // 1 JavaScript沒有塊級作用域
函數(shù)作用域:
在函數(shù)作用域內(nèi),聲明變量時不加'var'則變量為全局變量囚企,否則其作用域為函數(shù)作用域
function test(){
var a = 1;
}
console.log(a);
//出錯
//
function test(){
a = 1;
}
console.log(a);
//沒有錯誤
JS中的六大數(shù)據(jù)類型
js中有六種數(shù)據(jù)類型丈咐,包括五種基本數(shù)據(jù)類型(Number,String,Boolean,Undefined,Null),和3種引用數(shù)據(jù)類型(Object,Function,Array)。
基本數(shù)據(jù)類型
1.Number類型
Number類型包含整數(shù)和浮點數(shù)(浮點數(shù)數(shù)值必須包含一個小數(shù)點龙宏,且小數(shù)點后面至少有一位數(shù)字)兩種值棵逊。
2.String類型
單引號或雙引號擴(kuò)起來的字符集合
3.Boolean類型
該類型只有兩個值,true和false
4.Undefined類型
只有一個值烦衣,即undefined值歹河。使用var聲明了變量,但未給變量初始化值花吟,那么這個變量的值就是undefined秸歧。
5.Null類型
Null類型被看做空對象指針,Null類型也是空的對象引用衅澈。
三大引用類型
1.Object類型
我們看到的大多數(shù)類型值都是Object類型的實例键菱,創(chuàng)建Object實例的方式有兩種。
第一種是使用new操作符后跟Object構(gòu)造函數(shù)今布,如下所示
var person = new Object();
person.name = "Micheal";
person.age = 24;
第二種方式是使用對象字面量表示法经备,如下所示
var person = {
name : "Micheal",
age : 24
};
alert(person.name);
2.Array類型
數(shù)組的每一項可以用來保存任何類型的數(shù)據(jù),也就是說部默,可以用數(shù)組的第一個位置來保存字符串侵蒙,第二個位置保存數(shù)值,第三個位置保存對象....另外傅蹂,數(shù)組的大小是可以動態(tài)調(diào)整的纷闺。
創(chuàng)建數(shù)組的基本方式有兩種
第一種是使用Array構(gòu)造函數(shù)算凿,如下所示
var colors = new Array("red","blue","yellow");
第二種是使用數(shù)組字面量表示法,如下所示
var colors = ["red","blue","yellow"];
3 Function類型
每個函數(shù)都是Function類型的實例犁功,而且都與其他引用類型一樣具有屬性和方法氓轰。函數(shù)通常是使用函數(shù)聲明語法定義的,如下所示
function sum(num1,num2){
return num1 + num2;
};
這和使用函數(shù)表達(dá)式定義函數(shù)的方式相差無幾浸卦。
var sum = function (num1,num2){
return num1 + num2;
};
var result = sum(5,8);
alert(result);
typeof 操作符
由于js中的變量是弱類型的署鸡,所以它提供了一種檢測當(dāng)前變量的數(shù)據(jù)類型的方法,也就是typeof關(guān)鍵字.
typeof 123 //Number
typeof 'abc' //String
typeof true //Boolean
typeof undefined //Undefined
typeof null //Object
typeof { } //Object
typeof [ ] //Object
js的三種輸出方式
/*
* 控制瀏覽器彈出一個提示框
*/
alert("Hello JavaScript");
/*
* 控制瀏覽器在頁面中輸出一個內(nèi)容
* document.write()向body中寫一個內(nèi)容
*/
document.write("看我出來不限嫌?靴庆??");
/*
向控制臺輸出一個內(nèi)容
* */
console.log("你看我在哪出來~~~");
js編寫的位置
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<!--可以將JS代碼編寫到script標(biāo)簽中-->
<!--<script type="text/javascript">
alert("hello");
</script>-->
<!--
還可以將JS代碼編寫到外部的js文件中萤皂,然后通過script標(biāo)簽來引入外部的文件
將JS代碼編寫到外部文件中撒穷,可以在不同的頁面中引入相同的JS代碼,
方便后期的維護(hù)裆熙,并且寫在外部文件中可以使用瀏覽器的緩存,加快訪問速度提高用戶體驗
如果使用script來引入外部文件禽笑,則它就不能在編寫任何的JS代碼了 入录,
如果還需要編寫則需要創(chuàng)建一個新的script標(biāo)簽
-->
<script type="text/javascript" src="js/script.js"></script>
<script type="text/javascript">
alert("我是內(nèi)部的JS代碼");
</script>
</head>
<body>
<!--
將JS代碼編寫到標(biāo)簽的屬性中,屬于結(jié)構(gòu)與行為耦合佳镜,不方便后期的維護(hù)僚稿,不推薦使用
-->
<!--
可以將JS代碼編寫到標(biāo)簽的指定屬性中
-->
<button onclick="alert('你點我干嘛~~~~');">點我一下</button>
<!--
可以將JS代碼編寫到超鏈接的href中
-->
<a href="javascript:alert('討厭!s吧臁蚀同!');">你也點我一下</a>
<br /><br />
<a href="javascript:;">你也點我一下</a>
</body>
</html>
js字符串
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
*
* 在解析器的底層,保存字符串時啊掏,實際上是以字符數(shù)組的形式保存的
* 所以字符串的操作方法和數(shù)組都是非常相似的
*
*/
var str = "Hello neusoft";
//console.log(str.length);
//console.log(str[6]);
/*
* length可以用來獲取一個字符串的長度
*/
/*
* charAt()
* - 可以根據(jù)索引來獲取指定位置的字符
*
* charCodeAt()
* - 可以根據(jù)索引來獲取指定位置的字符的字符編碼
*
* String.fromCharCode()
* - 可以根據(jù)字符編碼來獲取字符
*/
str = "中AaHello neusoft";
var result = str.charAt(0);
result = str.charCodeAt(0);
result = String.fromCharCode(20013);
//console.log(result);
/*
* concat()
* - 可以用來連接兩個或多個字符串
* - 作用+ 一樣
*/
str = "hello";
var str2 = "world";
result = str.concat(str2,"你好","天氣好","吃的好");
/*
* indexOf()
* - 檢索指定字符串在當(dāng)前字符串中的位置
* - 參數(shù):
* 第一個參數(shù)蠢络,要查詢的字符串
* 第二個參數(shù),查找開始的位置
*
* - 返回值:
* 默認(rèn)會返回字符串第一次出現(xiàn)的位置的索引
* 如果沒有找到該內(nèi)容迟蜜,則返回-1
*
* lastIndexOf()
* - 檢索指定字符串在當(dāng)前字符串中的位置
* - 該方法和indexOf()一樣刹孔,不同的是indexOf()是從前往后找
* 而lastIndexOf()是從后往前找
*/
str = "Helo neusoft";
//result = str.indexOf("a");
//result = str.indexOf("l",3);
result = str.lastIndexOf("l",5);
/*
* slice()
* - 可以用來截取一個字符中的內(nèi)容
* - 參數(shù):
* 第一個參數(shù),截取開始位置的索引(包括開始位置)
* 第二個參數(shù)娜睛,截取結(jié)束位置的索引(不包括結(jié)束位置)
* - 可以接收一個負(fù)值作為參數(shù)髓霞,如果是負(fù)值,則從后往前數(shù)
* - 也可以省略第二個參數(shù)畦戒,如果省略則一直截取到最后
*/
str = "Hello neusoft";
result = str.slice(0,5);
result = str.slice(5);
/*
* substring()
* - 用來截取字符串的
* - 參數(shù):
* 第一個參數(shù)方库,截取開始位置的索引(包括開始位置)
* 第二個參數(shù),截取結(jié)束位置的索引(不包括結(jié)束位置)
* - 該方法不接收負(fù)值障斋,如果傳遞了一個負(fù)值纵潦,則默認(rèn)會設(shè)置為0
* - 該方法中如果第二個參數(shù)小于第一個,則會調(diào)整參數(shù)的位置
*
*/
str = "Hello neusoft";
result = str.substring(6,0);
/*
* substr()
* - 用來截取字符串
* - 參數(shù):
* 第一個參數(shù),截取開始位置的索引
* - 可以是負(fù)值酪穿,如果是負(fù)值從后往前數(shù)
* 第二個參數(shù)凳干,截取的個數(shù)
*/
str = "Hello neusoft";
result = str.substr(-3,2);
//console.log(result);
/*
* split()
* - 可以將一個字符串拆分為一個數(shù)組
* - 它需要一個字符串作為參數(shù),將會根據(jù)該字符串對字符串進(jìn)行拆分
* 并且將拆分的后的值保存到一個數(shù)組中返回
*/
str = "孫悟空@豬八戒@沙和尚@唐僧";
result = str.split("@");
//console.log(Array.isArray(result));
//console.log(result);
/*
* toLowerCase()
* - 將一個字符串轉(zhuǎn)換為小寫
* toUpperCase()
* - 將一個字符串轉(zhuǎn)換為大寫
*/
str = "abcdefg";
result = str.toUpperCase();
str = "ABCDEFG";
result = str.toLowerCase();
console.log(result);
var myStr = "I,love,you,Do,you,love,me";
var replacedStr = myStr.replace("love","hate");//"I,hate,you,Do,you,love,me";
//replace默認(rèn)只替換第一次查找到的被济,想要全局替換救赐,需要置上正則全局標(biāo)識,如
var myStr = "I,love,you,Do,you,love,me";
var replacedStr = myStr.replace(/love/g,"hate");//"I,hate,you,Do,you,hate,me"
</script>
</head>
<body>
</body>
</html>
數(shù)組
數(shù)組簡介
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 數(shù)組(Array)
* - 數(shù)組也是一個對象只磷,功能和普通對象(Object)的功能類似的
* - 數(shù)組中也可以保存不同的元素经磅,不同的是普通對象是通過一個字符串作為屬性名來操作屬性的,
* 而數(shù)組是通過索引來操作元素的钮追。
* - 索引(index)
* - 索引就是從0開始的整數(shù)
* - 數(shù)組比普通對象的存儲效率要高预厌,在開發(fā)中我們經(jīng)常使用數(shù)組來存儲一些數(shù)據(jù)
*/
//創(chuàng)建一個數(shù)組對象
var arr = new Array();
//使用typeof檢查一個數(shù)組對象時會返回object
//console.log(typeof arr);
/*
* 向數(shù)組中添加元素
* - 語法:
* 數(shù)組[索引] = 值;
*/
arr[0] = 10;
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
arr[4] = 30;
/*
* 讀取數(shù)組中的元素
* - 語法:
* 數(shù)組[索引]
*/
//如果讀取一個數(shù)組中沒有的元素,會返回undefined
//console.log(arr[4]);
//獲取數(shù)組的長度
/*
* length
* - length屬性可以獲取或設(shè)置數(shù)組的長度
* - 對于連續(xù)的數(shù)組通過length屬性獲取到的就是數(shù)組中元素的個數(shù)
*/
//console.log(arr.length);//獲取數(shù)組的長度
//修改數(shù)組的length屬性
//如果將長度修改為小于之前的長度的值元媚,則多余的部分會被刪除
arr.length = 5;
//如果將長度修改為大于之前的長度的值轧叽,則會數(shù)組中會創(chuàng)建出空的元素
//arr.length = 10;
//向數(shù)組的最后添加一個元素
//語法:數(shù)組[數(shù)組.length] = 值;
arr[arr.length] = 55;
arr[arr.length] = 75;
arr[arr.length] = 85;
console.log(arr);
</script>
</head>
<body>
</body>
</html>
數(shù)組字面量表達(dá)方式(推薦)
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 數(shù)組的字面量
*/
//var arr = new Arry();
var arr = [] ;
/*
* 使用字面量,可以在創(chuàng)建數(shù)組的同時刊棕,向數(shù)組中添加元素
* 語法:
* var 數(shù)組 = [元素1,元素2...元素N];
*/
arr = [1,2,3,4,5,6,7];
//console.log(arr[6]);
arr = new Array(1,2,3,4,5,6,7);
arr = [10];//創(chuàng)建一個數(shù)組并向數(shù)組中添加一個元素
arr = new Array(10);//創(chuàng)建一個長度為10的數(shù)組
//console.log(arr.length);
/*
* 在數(shù)組中可以保存任意類型的元素
*/
arr = [1,"hello",true,null,undefined,{name:"孫悟空"},function(){}];
//console.log(arr[5].name);
//console.log(arr[6]);
//數(shù)組中也可以保存數(shù)組炭晒,如果數(shù)組中保存的依然是數(shù)組,則我們稱這個數(shù)組為二維數(shù)組
arr = [
[1,2,3],
[4,5,6],
[5,6,7]
];
console.log(arr[0][1]);
</script>
</head>
<body>
</body>
</html>
數(shù)組的常用方法
push(),pop(),unshift(),shift()
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 創(chuàng)建一個數(shù)組
*/
var arr = ["孫悟空","豬八戒","沙和尚"];
/*
* push()
* - 該方法可以用來向數(shù)組的末尾添加新的元素,并返回數(shù)組的新的長度
*/
//console.log(arr);
var result = arr.push("唐僧","白骨精","蜘蛛精");
//console.log(arr);
//console.log("result = "+result);
/*
* pop()
* - 用來刪除并返回數(shù)組的最后一個元素
* - 元素刪除以后甥角,會自動修正數(shù)組的長度
*/
result = arr.pop();
result = arr.pop();
//console.log(arr);
//console.log("result = "+result);
/*
* unshift()
* - 向數(shù)組的最前邊添加元素网严,并返回新的長度
*/
result = arr.unshift("牛魔王","鐵扇公主");
console.log(arr);
//console.log("result = "+result);
/*
* shift()
* - 刪除數(shù)組最前邊的元素,并返回被刪除的元素
* - 刪除完元素以后嗤无,會自動調(diào)整數(shù)組的長度
*/
result = arr.shift();
result = arr.shift();
console.log(arr);
console.log("result = "+result);
console.log(arr.length);
</script>
</head>
<body>
</body>
</html>
遍歷數(shù)組方式一
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
/*
* 創(chuàng)建一個數(shù)組
*/
var arr = ["孫悟空","豬八戒","沙和尚","唐僧","白骨精","蜘蛛精"];
/*
* 遍歷數(shù)組
* - 遍歷數(shù)組就是指將數(shù)組中的每一個元素都獲取到
* - 一般情況下遍歷數(shù)組都是使用for循環(huán)來遍歷
*/
for(var i = 0 ; i < arr.length ; i++ ){
console.log(arr[i]);
}
</script>
</head>
<body>
</body>
</html>
遍歷數(shù)組方式二:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
/*
* 也可以使用forEach()來遍歷數(shù)組
* forEach()中需要一個函數(shù)作為參數(shù)
* - 像這種由我們定義而不由我們調(diào)用的函數(shù)震束,我們稱為回調(diào)函數(shù)
* - forEach()中的回調(diào)函數(shù),由瀏覽器調(diào)用当犯,
* 數(shù)組中有幾個元素函數(shù)就會被調(diào)用幾次垢村,
* 每次遍歷到一個元素都會調(diào)用一次函數(shù),瀏覽器會通過實參的形式來將遍歷到內(nèi)容傳遞進(jìn)函數(shù)
* - 瀏覽器在調(diào)用回調(diào)函數(shù)傳遞了三個實參:
* 第一個參數(shù):正在遍歷的元素
* 第二個參數(shù):正在遍歷的元素的索引
* 第三個參數(shù):正在遍歷的數(shù)組對象
*
* - forEach()方法不支持IE8及以下的瀏覽器灶壶,所以如果需要兼容IE8則不要使用
*
*/
arr.forEach(function(value , index , obj){
console.log("value = "+value + " index = "+index+" obj = "+obj);
});
//過濾
var newarr = arr.filter(function (v,index,obj){
return v.length == 3;
});
console.log(newarr);
//映射
var newarr = arr.map(arr.filter(function (v,index,obj){
return 'hello' + v;
});
console.log(newarr);
//去重
var temp = [];
var newarr = arr.filter(function (v,index,obj){
if(temp.indexOf(v) < 0){
temp.push(v);
return true;
}
else{
return false;
}
});
console.log(newarr);
var newarr = arr.filter(function (v,index,obj){
return arr.indexOf(v,index+1)==1;
});
</script>
</head>
<body>
</body>
</html>
數(shù)組方法:
slice()肝断,splice():
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
/*
* slice()
* - 可以用來截取數(shù)組中的指定元素
* - 參數(shù):
* 第一個參數(shù),截取開始的位置(包括開始的位置)
* 第二個參數(shù)驰凛,截取結(jié)束的位置(不包括結(jié)束的位置)
* - 該方法不會影響到原數(shù)組胸懈,而是將截取到的內(nèi)容封裝為一個新的數(shù)組返回
* - 可以傳遞一個負(fù)數(shù)作為參數(shù),如果是負(fù)數(shù)恰响,則從后往前數(shù)
* -1 表示 倒數(shù)第一
* -2 表示 倒數(shù)第二
* - 如果省略第二個參數(shù)趣钱,則從開始位置一直截取到最后
*/
var result = arr.slice(1,3);
result = arr.slice(1,-2);
result = arr.slice(1);
//console.log(result);
/*
* splice()
* - 可以用來刪除數(shù)組中的元素,并添加新元素
* - 它會影響到原數(shù)組胚宦,一旦執(zhí)行原數(shù)組中的元素將會被刪除
* - 參數(shù):
* 第一個參數(shù)首有,開始位置的索引
* 第二個參數(shù)燕垃,表示刪除的個數(shù)
* 第三個參數(shù),這個方法還可以傳遞多個參數(shù)
* 在第三個參數(shù)以后井联,可以跟多個元素作為參數(shù)卜壕,
* 這些元素將會被插入到開始位置之前的位置
* - 它會將被刪除的元素作為返回值返回
*
*/
arr = ["孫悟空","豬八戒","沙和尚","唐僧"];
//result = arr.splice(0,1);
//牛魔王替換 索引為0的元素
//result = arr.splice(0,1,"牛魔王");
//arr.splice(2,1,"牛魔王","紅孩兒","二郎神");
arr.splice(2,0,"牛魔王","紅孩兒","二郎神");
console.log(arr);
</script>
</head>
<body>
</body>
</html>
數(shù)組的其他方法
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title></title>
<script type="text/javascript">
var arr = ["孫悟空","豬八戒"];
var arr2 = ["白骨精","蜘蛛精"];
var arr3 = ["太上老君","如來佛祖"];
/*
* concat()
* - 可以用來連接兩個或多個數(shù)組
* - 不會影響原數(shù)組,而是將新的數(shù)組的返回
* - 可以將多個數(shù)組作為concat參數(shù)傳遞烙常,也可以傳遞單個的元素
*/
var result = arr.concat(arr2 , arr3 , "唐僧");
//console.log(result);
/*
* join()
* - 可以將數(shù)組中的所有的元素連接為一個字符串
* - 該方法可以接收一個字符串作為參數(shù)轴捎,這個字符串將會將會作為連接符來連接元素
* 如果不傳,默認(rèn)使用,
*/
arr = ["孫悟空","豬八戒","沙和尚"];
result = arr.join("@-@");
//console.log(result);
/*
* reverse()
* - 該方法可以用來反轉(zhuǎn)數(shù)組
* - 前邊的去后邊蚕脏,后邊的去前邊
* - 它會影響到原數(shù)組侦副,直接在原數(shù)組上反轉(zhuǎn)
*/
//arr.reverse();
//console.log(arr);
/*
* sort()
* - 可以用來對數(shù)組中的元素進(jìn)行排序
* - sort()會影響到原數(shù)組
* - 默認(rèn)它會按照元素的Unicode編碼進(jìn)行排序
* - 如果希望使用sort對一個數(shù)字型的數(shù)組進(jìn)行排序可能會得到不可預(yù)期的結(jié)果
* 因為它同樣也會按照數(shù)字的Unicode編碼進(jìn)行排序
* - 我們也可以自己來指定排序的規(guī)則
*
*/
var arr4 = ["a","c","b","e","d","f"];
arr4.sort();
//arr4 = [2,3,10,5,4,6];
/*
* 如果需要自定義排序規(guī)則,需要將一個函數(shù)作為參數(shù)傳遞給sort()方法
* 函數(shù)的結(jié)構(gòu):function(a , b){}
*
* 瀏覽器會多次以數(shù)組中的元素作為實參來調(diào)用該函數(shù)驼鞭,
* a和b具體是誰不確定秦驯,但是a一定是在b前邊
* 瀏覽器將會根據(jù)函數(shù)的返回值,來決定兩個元素是否交互位置
* 如果返回一個大于0的值挣棕,則兩個元素互相交換位置
* 如果返回一個等于0的值译隘,則證明兩個元素相等,位置不變
* 如果返回一個小于0的值穴张,兩個元素的位置也不變
*
*/
arr4 = [10,4,3,5,2];
arr4.sort(function(a,b){
/*//升序 小 ---> 大
if(a > b){
//交換位置
return 1;
}else if(a == b){
return 0;
}else{
return -1;
}*/
//降序 大 ---> 小
/*if(a > b){
//交換位置
return -1;
}else if(a == b){
return 0;
}else{
return 1;
}*/
//如果希望升序排列细燎,則 返回 a-b
//return a - b;
//如果希望降序排列,則 返回 b-a
return b - a;
});
console.log(arr4);
</script>
</head>
<body>
</body>
</html>