JavaScript學習補充(一)

數據類型和變量
var 變量名;可以命名多個同名變量
let 變量名; 不可以命名同名變量
比較運算符:> <   !=    
        		==僅比較數值
        		===不僅比較數字,還比較數據類型
        		NaN是個特殊number,與所有數值不相等,與自己也不相等,但可以通過isNaN();函數判斷
//比較運算符
alert(3>5);//false

var a=10;
var b="10";
alert(a==b);//true  == 只比較數值
alert(a===b);//false ===不僅比較數值,也比較數據類型

alert(NaN===NaN);//false NaN這個特殊的number與所有其他之都不相等,與自己也不相等
isNaN(NaN);//true
null和undefined
null表示一個空值,與0和空字符串不同;undefined表示值未定義

數組:

    var arr=[1,123,13.4,"abc",null,undefined];
    
    var arr=new Array(1,2,3);
 

對象:由鍵值組成的無序集合

var person={
	name:"Bob",
	age:13,
	city:Beijing,
	hobby:[js,c++,java]

};
//獲取對象屬性   對象名.屬性名
person.name;

變量命名只能用數字、字母、下劃線、美元符號$(區分大小寫)

字符串
字符串可以用單引號或雙引號引出,如果'本身是一個字符,可以用“”括起來
“I'm OK”是6個字符;字符串內' ‘’等也可以用轉義字符\標識;ASCII碼可以是\x##形式的十六進制表示


多行字符用反引號括起來
`這是一個
多行
字符串`;
    多個字符串可以用+連接,或者使用模板字符串
	字符串名.length;求長度
	字符串名【索引號】;獲取相應位置的值,索引號從0開始
	注意:字符串是不可變的,如果對字符串中的某個索引賦值,不會有任何錯誤也沒有任何效果
	字符串名.toUpperCase()全部大寫
	字符串名.toLowerCase()全部小寫
	字符串名.indexof();搜索指定字符串出現位置
	字符串名.substring(a,d);返回指定索引區間子串
	字符串名.substring(a);返回指定索引到結束的子串
var name="小米";
var age=10;
var message='hello',${name},'你今年'+age+"歲了"alert(message);
var message="小米"+"愛喫"+"玉米"alert(message);
var s="hello";
s.length;//5
s.toUpperCase();//HELLO
s.toLowerCase();//hello
s.indexof(o);//4
s.substring(2,3);//ll
s.substring(2);//llo
數組
javascript的Array可以包含任意數據類型
通過索引訪問各元素
直接給Array的length賦一個新值會改變數組大小
可以通過索引改變對應元素的值
通過索引賦值時超出範圍也會改變數組大小
數組名.indexof(索引值);訪問索引對應值
數組名.slice(a,b);截取從索引a到b但不包括b的值
數組名.slice(a);截取從索引a到最後的值
數組名.push(值,值……);在末尾增加數據
數組名.pop();在末尾刪除一個數據
數組名.unshift(值,值……);從數組頭部增加值
數組名.shift();從數組頭部刪除值
數組名.sort();給數組排序
數組名.reverse();數組反轉
數組名.splice(a,b,值,值);從索引a刪除b個值,然後添加後邊元素;b爲零時不刪除只添加;沒有值時只刪除不添加
數組名.concat(值);連接並返回新數組
數組名.join("-");如果數組中的元素不是字符串,自動轉換爲字符串後以括號中 的字符連接
多維數組
	var arr=[[1,2,3],["abc",a,9]];
var arr=[1,1.3,222,"abc",null];
arr.length;//5
arr.indexof(2);//222
arr.slice(2,4);//222,"abc"
arr.slice(3);//"abc",null
arr.push(1,3,"ccc");//[1,1.3,222,"abc",null,1,3,"ccc"]
arr.pop();//[1,1.3,222,"abc",null,1,3]
arr.unshift(4);//[4,1,1.3,222,"abc",null,1,3]
arr.shift();//[1,1.3,222,"abc",null,1,3]
var arr=['A','C','B'];
arr.sort();//['A','B','C']
arr.reverse();//['B','C','A']

ar arr = ['Microsoft', 'Apple', 'Yahoo', 'AOL', 'Excite', 'Oracle'];
// 從索引2開始刪除3個元素,然後再添加兩個元素:
arr.splice(2, 3, 'Google', 'Facebook'); // 返回刪除的元素 ['Yahoo', 'AOL', 'Excite']
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']
// 只刪除,不添加:
arr.splice(2, 2); // ['Google', 'Facebook']
arr; // ['Microsoft', 'Apple', 'Oracle']
// 只添加,不刪除:
arr.splice(2, 0, 'Google', 'Facebook'); // 返回[],因爲沒有刪除任何元素
arr; // ['Microsoft', 'Apple', 'Google', 'Facebook', 'Oracle']

var arr = ['A', 'B', 'C'];
var add = arr.concat([1, 2, 3]);
alert(add); // ['A', 'B', 'C', 1, 2, 3]
alert(arr); // ['A', 'B', 'C']

var arr=['A','B','C'];
arr.join('-');//'A-B-C'
對象
var person={
	name:'小米',
	age:10,
	'study-school':'第一實驗小學'

}
person.name;//'小米'
person['age'];//10
person['study-school'];//'第一實驗小學'
對象的屬性都在{}花括號中以鍵:值的方式成對出現
訪問屬性: 對象名.鍵;但是鍵必須是有效變量
屬性爲有效變量或不是有效變量都可以用以下方式
 例: ‘study-school’不是有效變量,只能用對象名【‘study-school’】獲取值
條件判斷
var a=3;
var b=5;
if(a>b){
	alert('a大');
}else if(a=b){
	alert('一般大');
}else{
	alert('b大');
}
循環
var sum=0;
for(var i=0;i<10;i++){
	sum=sum+i;
}
alert(sum);//45

var person={
	name:'小米',
	age:10,
	school:'第一小學'
}
for(var key in person){
	if(person.hasOwnProperty(key)){
		console.log(key);//'小米','10','第一小學'
}

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

}

var n=10
while(n>0){
  console.log("hello");
  n--;

}
}


do{
	console.log('hello');
	n--;

}while(n>0);
Map Set

先測試瀏覽器是否支持ES6規範

'use strict'
var m=new Map();
var s=new Set()
console.log("瀏覽器支持Map和Set");

map

一個鍵對應一個value,多次對同一個鍵放入值,後面的值會把前面的值沖掉
var map=new Map([["小米"90],["小明",80]]);
//或
var map=new Map();
map.set("吉姆",70);//增加鍵值對
map.has("吉姆");//查看是否存在鍵,true存在
map.get("吉姆");//70 
map.delete("吉姆");//刪除鍵值對
map.get("tom");//undefined

set

set是一組鍵集合,但是不存儲value,鍵不能重複,重複的元素自動被過濾
var s=new Set();
var s=new Set(['1',1,1,2,4,5]);//Set{'1',1,2,4,5}
s.add(6);//Set{'1',1,2,4,5,6}
s.delete(2);//Set{'1',1,4,5,6}
Map和Set不能用下標遍歷,爲同一集合類型,ES6標準引入iterable類型,Map、Set和Array都屬於此類型
用for……of遍歷

檢查瀏覽器是否支持

'use strict'
var a=[1,2,3];
for(var x of a){
}
console.log('瀏覽器支持');

for……in遍歷的是對象的屬性名稱;當array對象添加額外屬性後可以看出
var arr=[1,2,3];
arr.name='hello';
for(var x in arr){
	console.log(x);//'0','1','2','name'

}//for in循環把name包括在內,但arr的length屬性卻不包括在內
for……of遍歷的是集合本身元素

iterable內置forEach()方法,接受一個函數,每次迭代就回調該函數

var a=['a','b','c'];
a.forEach(function(element,index,array){
//element 指向當前元素的值
//index 指向當前索引
//array 指向Array對象本身
	console.log(element+',index='+index);

});

var map=new Map(['a',4],['b',2]);
map.forEach(function(value,key,map){
	console.log(value);

});

var s=new Set([1,2,4]);
s.forEach(function(element,sameElement,set){
console.log(element);

});
 
函數
//方式一
/**
*function 函數名(【形式參數】){
*	函數體;
*	【return;】
*}
*
*/
function abc(x){
  return x;
}

//方式二
/**
*var 函數名=function(【形式參數】){
* 函數體;
* 【return;】
*}
*
*/
funct
var abc=function(x){return x;}
一旦執行到return時執行完畢,返回結果,如果沒有return則返回unfinished
調用函數時允許傳入任意個參數而不影響調用
調用函數時傳入的參數少也可以,少的參數用undefined代替
避免收到undefined,可以對參數進行檢查
function abs(x) {
    if (typeof x !== 'number') {
        throw 'Not a number';
    }
    if (x >= 0) {
        return x;
    } else {
        return -x;
    }
}
 argument只在函數內部起作用,永遠指向當前函數調用者傳入的所有參數,類似數組但不是數組,argument【i】;
rest參數是除去輸入對應形參的參數之外的元素的數組,rest參數用...標識,只能寫在形參最後
function foo(a, b, ...rest) {
    console.log('a = ' + a);
    console.log('b = ' + b);
    console.log(rest);
}

foo(1, 2, 3, 4, 5);
// 結果:
// a = 1
// b = 2
// Array [ 3, 4, 5 ]

foo(1);
// 結果:
// a = 1
// b = undefined
// Array []

測試瀏覽器是否支持`

'use strict'
function sum(...rest){
}
// 測試:
var i, args = [];
for (i=1; i<=100; i++) {
    args.push(i);
}
if (sum() !== 0) {
    console.log('測試失敗: sum() = ' + sum());
} else if (sum(1) !== 1) {
    console.log('測試失敗: sum(1) = ' + sum(1));
} else if (sum(2, 3) !== 5) {
    console.log('測試失敗: sum(2, 3) = ' + sum(2, 3));
} else if (sum.apply(null, args) !== 5050) {
    console.log('測試失敗: sum(1, 2, 3, ..., 100) = ' + sum.apply(null, args));
} else {
    console.log('測試通過!');
}

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章