JS(一)

虛幻交界發表於2020-12-22

js程式碼匯入方式

1. 嵌入式
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script>
    	alert('hello');
    </script>
</head>
<body>
    
</body>
</html>
2. 行內式
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <input type="button" value="點我" onclick="alert('hello')">
</body>
</html>
3. 外部匯入
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <script src="myjs.js"></script>
</head>
<body>
    
</body>
</html>

註釋

1. 單行註釋
// 單行註釋
2. 多行註釋
/*
多行註釋
*/

修改vscode中塊註釋
管理 -> 鍵盤快捷方式 -> 搜尋 切換塊註釋 -> 設定為 ctrl + shift + /

輸入輸出語句

  • alert 瀏覽器警示框 alert('hello')
  • console.log 瀏覽器控制檯列印 console.log('see this message')
  • prompt 瀏覽器彈出輸入框 prompt('請輸入數字:')

變數

變數的初始化
var name = 'zzer';
var age;
age = 20;

var a=1,b=2,c=3;
變數命名規範
  1. 變數名可使用字母,數字,下劃線,美元符號$ 組成
  2. 區分大小寫
  3. 不能以數字開頭
  4. 不能為保留關鍵字
  5. 駝峰命名法,首字母小寫,後面的單詞首字母大寫

資料型別

基本資料型別
簡單資料型別說明預設值
Number數字型,整形,浮點型0
Boolean布林值型別,如 true、false,等價於 1,0false
String字串''
Undefinedvar a; 未賦值時 a = undefinedundefined
Nullvar a = null; 宣告變數a為空值null
#### Number ##### 八進位制 數字前加 0 010 -> 十進位制 8 ##### 十六進位制 數字前加 0x 0x10 -> 十進位制16
Number物件屬性

Number.MAX_VALUE
Number.MIN_VALUE

Infinity 無窮大
-Infinity 無窮小
NaN (not a number ) 非數字

isNaN

判斷變數是否為數字
isNaN(123)

String

使用一對單引號或雙引號

轉義字元
\n 換行
\b 空格
\t 製表符

字串長度

字串length屬性

var str = 'hello';
str.length;
字串拼接
var str = 'hello' + 'world';

數值和字串相加 自動將數值轉為字串

Boolean

true 相當於 1
false 相當於 0

Undefined

變數宣告未賦值時 未undefined

Null

空值

內建函式

typeof 獲取物件資料型別

var str = ‘string’;
typeof str

資料型別轉換

轉換為字串
物件方法 .toString()

var num = 10;
console.log(num.toString())

String

var num = 10;
console.log(String(num))

使用字串拼接

var num = 10;
console.log(num + ‘’)

轉換為數字型
parseInt()

parseInt(‘123’)
parseInt(‘120px’) 可以去單位

parseFloat()

parseFloat(‘3.14’)

Number()

Number(‘321’)

進行算術運算隱式轉換

‘12’ - 0 結果為 Number 12
‘123’ - ‘120’ 結果為 Number 3

Boolean轉換為布林型

‘’,0,NaN,null,undefined 為false
Boolean(1) -> true

運算子

遞增運算子

遞增 ++
遞減 –

前置遞增運算子

先加1 後返回值
var num = 0;
console.log(++num + 1); //->2

後置遞增運算子

先返回原值,後自加1
var num = 0;
console.log(num++ + 1); //->1

比較運算子

>大於
>=大於等於
<小於
<=小於等於
==相等判斷兩邊值是否相等,包含隱性轉換
!=不等於
===全等值和資料型別都一樣

邏輯運算子

邏輯運算子說明案例
&&邏輯與 and true && false -> false
||邏輯或 ortrue || false -> true
!邏輯非 not!true -> false

賦值運算子

var num = 1;
num += 2;
num -= 2
num *= 2;
num /= 2;
num %= 2;

運算子優先順序

小括號
一元運算子
算術運算子
關係運算子
相等運算子
邏輯運算子 先 && 後 ||
賦值運算子
逗號運算子

流程控制

if語句
if (條件表示式) {
	程式碼塊1;
} else if{
	程式碼塊2;
} else {
	程式碼塊3;
}

三元表示式

條件表示式 ? 表示式1: 表示式2

如果條件表示式為真 執行表示式1 否則執行表示式2

switch語句

將表示式的值與 value值相匹配

switch(表示式) {
	case value1:
		執行語句1;
		break;
	case value2:
		執行運距2;
		break;
	default:
		執行最後語句;
}
for迴圈
for (初始化變數; 條件表示式; 操作表示式) {
 迴圈體
}
while迴圈
while (條件表示式) {
	迴圈體
}

當條件表示式為true時執行,為false是退出

do while迴圈
do {
	迴圈體
} while (條件表示式) 

先執行迴圈體,再判斷條件

continue,break 關鍵字

continue 跳過本輪迴圈
break 跳出迴圈體

陣列

js中一個陣列可以儲存不同資料型別資料

陣列建立
1.方式一
var arr = new Array();
2.方式二
var arr = [];

陣列元素用逗號分隔

獲取陣列元素
索引訪問
var arr = ['a','b','c','d'];
arr[0]  //索引從0開始 只有正向索引
arr[4] // 輸出undefined
獲取陣列長度
var arr = [‘a’,'b','c','d'];
console.log(arr.length)
陣列遍歷
var arr = [‘a’,'b','c','d'];
for (var i = 0; i < arr.length; i++) {
	console.log(arr[i])
}
陣列新增元素

1.方式一

修改length屬性,length可讀性
var arr = [‘a’,'b','c','d'];
arr.length = 6
其中 arr[4],arr[5] 為undefined

2.方式二

var arr = [‘a’,'b','c','d'];
arr[4] = 'e'
迴圈追加元素
var arr = [];
for (var i = 0; i < 10; i++) {
	arr[i] = i;
}
var arr = [];
for (var i = 0; i < 10; i++) {
	arr[arr.length] = i;
}
翻轉陣列
var arr = [1,2,3,4,5];
var new_arr = [];
for (var i = 0; i < ar.length; i++) {
	new_arr[arr.length - i - 1] = arr[i] 
}

//==============

var arr = [1,2,3,4,5];
var new_arr = [];
for (var i = arr.length - 1; i >= 0; i--) {
	new_arr[new_arr.length] = arr[i] 
}
陣列氣泡排序
var arr = [5,4,3,2,1];
var temp;
for (var i = 0; i < arr.length - 1; i++) {
	for (var j = 0; j < arr.length - 1 - i; j++ ) {
		if (arr[j] > arr[j+1]) {
			temp = arr[j];
			arr[j] = arr[j+1];
			arr[j+1] = temp;
		}
	}
}

函式

函式定義
function 函式名(arg1, arg2) {
	函式體
}
引數

實參個數大於形參個數 -> 不會報錯 多餘的實參不會被接受
實參個數小於形參個數 -> 不會報錯 多餘的形參定義為undefined

return

終止函式,且只能返回一個值

function func(arg) {
	return arg;
}

返回多個值可以使用陣列

function func(num1, num2) {
	return [num1+num2, num1-num2, num1*num2, num1/num2]
}

無返回值函式返回undefined

arguments

函式中arguments物件包含傳遞的所有實參

偽陣列(1. 具有length屬性,2. 按索引方式儲存 3. 沒有真正陣列的方法 pop等)

function func() {
	return arguments
}

func(1,2,3,4,5)
匿名函式
var func = function(arg1,arg2) {
	函式體;
}
func()

作用域

某個變數起作用的範圍

函式內定義的變數作用域只在函式內

函式內部 不適用var 關鍵字直接賦值的變數 作用域為全域性

塊級作用域

es6之前沒有塊級作用域
塊級作用域 {} 裡面為單獨的作用域

作用域鏈

內部函式訪問外部函式的變數,採取的是鏈式查詢的方式,就近原則

預解析

js引擎執行js 分兩步 : 預解析 程式碼執行

預解析
變數預解析

將var變數宣告 放到當前作用域最前面(只宣告不符值)

var a = b = c = 9; // var a = 9; b = 9; c = 9;
// 多變數賦值 var a = 9,b = 9, c = 9
/*預解析時相當於 
var a;
c = 9; 
b = 9;
a = 9;
b,c為全域性作用域
*/

函式預解析

將function關鍵字宣告的函式提升到當前作用域的最前面
不提升 匿名函式賦值

var func = function() {
	
}

物件

一組無序的屬性和方法的集合

物件建立
  1. 字面量建立
    物件字面量 {}
var obj = {
	name:'man',
	run: function() {
		console.log('running...')
	}
}
  1. new Object建立
var obj = new Object(); // 建立一個空物件
obj.name = 'man';
obj.run = function() {
	console.log('running...')
}
  1. 建構函式建立物件
    用函式封裝類
function 建構函式名() {
	this.屬性 =;
	this.方法 = function() {}
}

var obj = new 建構函式名() // 建構函式建立物件必須用new關鍵字

建構函式不需要返回this

new關鍵字
  1. 記憶體中建立物件
  2. this指向建立的物件
  3. 執行建構函式內程式碼
  4. 返回物件
訪問物件

訪問屬性

  1. 物件名.屬性名
  2. 物件名[‘屬性名’]

呼叫物件方法
3. 物件名.方法名()

遍歷物件

for (var k in obj) {
console.log(k); // k為獲取的屬性名,方法名
console.log(obj[k]) // 獲取屬性值
}

內建物件

Math

Math詳細內容

Math.max()
獲取一組資料的最大值,若引數出現非數字型 放回值為NaN
Math.PI
圓周率
Math.abs()
取絕對值,會把字串隱式轉化成數值
Math.floor()
向下取整,直接去掉小數
Math.ceil()
向上取整 Math.ceil(1.1) -> 2
Math.round()
四捨五入 .5 往大的取 Math.round(-1.5) -> -1

Math.random()
返回一個隨機小數,無引數,0~1,不包括1

日期物件

是一個建構函式需要使用new 建立日期物件

var date = new Date(); // 不加引數返回系統當前時間
// 使用數字方式
var date2 = new Date(2019,10,10,3,3,3);
// Sun Nov 10 2019 03:03:03 GMT+0800 (中國標準時間)
var date3 = new Date(('1995-11-17T03:24:00');
// Fri Nov 17 1995 03:24:00 GMT+0800 (中國標準時間)
方法名說明程式碼
getFullYear()獲取當前年dObj.getFullYear()
getMonth()獲取當前月0-11,月份記得+1dObj.getMonth()
getDate()獲取當天日期dObj.getDate()
getDay()獲取星期幾(週日0 週六6)dObj.getDay()
getHours()獲取當前小時dObj.getHours()
getMinutes()獲取當前分鐘dObj.getMinutes()
getSeconds()獲取當前秒dObj.getSeconds()
獲取時間戳
var date = new Date()
// 方式1
date.valueOf()
// 方式2
date.getTime()
// 方式3
var now = +new Date() // 返回之間戳
// 方式4 H5 新增
Date.now()
倒數計時
function conutDown(time) {
	var now = Date.now();
	var inptime = +new Date(time);
	var time = (inptime - now) / 1000;
	var d = parseInt(time / 60 / 60 / 24);
	var h = parseInt(time / 60 / 60 % 24);
	var m = parseInt(time / 60 % 60);
	var s = parseInt(time % 60);
}

陣列物件

陣列建立
var arr1 = [];
var arr2 = new Array(2) // 陣列長度為2
var arr3 = new Array(2,3) // 陣列包含元素 2,3
陣列新增元素
push

給陣列追加元素,返回值是新陣列長度

var arr = [1,2,3];
arr.push(4,5); // [1,2,3,4,5]
unshift

在陣列前面追加新元素,返回值為新陣列長度

var arr = [1,2,3];
arr.unshift('a','b'); // ['a','b',1,2,3]
陣列刪除元素
pop

刪除陣列最後一個元素並返回

var arr = [1,2,3];
arr.pop() // 3
shift

刪除陣列第一個元素,並返回

var arr = [1,2,3];
arr.shift() // 1
陣列排序
reverse

翻轉陣列

var arr = [1,2,3,4]
arr.reverse() // [4,3,2,1]
sort

陣列排序(字元排序,升序)

var arr = [1,3,2,6,5,4]
arr.sort()  // 按字元規則排序
// 升序排列
arr.sort(function(a,b) {
	return a - b
})
// 降序排列
arr.sort(function(a,b) {
	return b - a
])
陣列排序,判斷元素是否存在
indexOf

返回陣列元素的索引號,只返回第一個找到的元素的索引號

若找不到元素返回 -1

var arr = ['a','b','c'];
console.log(arr.indexOf('b'));

陣列去重
原理:遍歷舊陣列,若元素不在新陣列中在新陣列中新增元素

var arr = ['a','b','c','c','d','f','g','d'];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
	if (newArr.indexOf(arr[i]) === -1) {
		newArr.push(arr[i]);
	}
return newArr
}
lastIndexOf

從後面開始查詢

var arr = ['a','b','c'];
console.log(arr.lastIndexOf('a')) // 0
陣列轉換為字串
.toString 方法
var arr = [1,2,3];
console.log(arr.toString());
join(分隔符)
var arr = [1,2,3];
console.log(arr.join(','))
concat 連線陣列
var arr1 = [1,2,3];
var arr2 = ['a','b','c'];
console.log(arr1.concat(arr2)); // 返回連線陣列的副本原陣列不會改變
// [1,2,3,'a','b','c']
slice 陣列切片

arrayObject.slice(start,end)

引數描述
start必需。規定從何處開始選取。如果是負數,那麼它規定從陣列尾部開始算起的位置。也就是說,-1 指最後一個元素,-2 指倒數第二個元素,以此類推。
end可選。規定從何處結束選取。該引數是陣列片斷結束處的陣列下標。如果沒有指定該引數,那麼切分的陣列包含從 start 到陣列結束的所有元素。如果這個引數是負數,那麼它規定的是從陣列尾部開始算起的元素。
返回值
返回一個新的陣列,包含從 start 到 end (不包括該元素)的 arrayObject 中的元素
var arr = [1,2,3,4,5,6,7,8];
console.log(arr.slice(1,5));
splice 陣列中刪除/替換元素

arrayObject.splice(index,howmany,item1,…,itemX)

引數描述
index必需。整數,規定新增/刪除專案的位置,使用負數可從陣列結尾處規定位置。
howmany必需。要刪除的專案數量。如果設定為 0,則不會刪除專案。
item1, ..., itemX可選。向陣列新增的新專案。
var arr = ['a','b','c','d'];
console.log(arr.splice(1,3,'e'));
// ['b','c','d']
console.log(arr);
// ['a','e']

字串物件

基本包裝型別

將簡單資料型別包裝成複雜物件

字串不可變
查詢字元索引
indexOf

strObj.indexOf(‘char’,[start])
沒有找到返回 -1

var str = 'abcdefg';
console.log(str.indexOf('b'));
lastIndexOf

strObj.lastIndexOf(‘char’,[start])
沒有找到返回 -1

var str = 'abcdefg';
console.log(str.lastIndexOf('b'));
根據索引返回字元
charAt
var str = 'andy';
console.log(str.charAt(3)); // y
charCodeAt

返回字元對應的ASCII碼

var str = 'andy';
console.log(str.charCodeAt(0)); // 0
strObj[index]
var str = 'andy';
console.log(str[0]);  // a
字串拼接、擷取
concat 拼接字串

strObj.concat(str1,str2,str3…)

var str = 'andy';
console.log(str.concat('red'));
substr 擷取字串

strObj.substr(start, num)
從start開始擷取幾個字元

var str = 'andy';
console.log(str.substr())
slice

strObj.slice(start,end)
從start開始到end結束,不包括end,負值表示從後面開始數

var str = 'andy';
console.log(str.slice(0,2)) // 'an'
替換字元

strObj.replace(‘被替換的字元’,‘要替換的字元’)
只替換匹配到的第一個字元

var str = 'aaaac';
console.log(str.replace('a','b'))  // 'baaac'
split

strObj.split(分隔符)

var str = 'a,b,c,d';
console.log(str.split(',')) // ['a','b','c','d']
轉換大小寫
var str = 'Andy';
console.log(str.toUpperCase());  // ANDY
console.log(str.toLowerCase());  // andy

資料型別判斷

instanceof
var arr = [];
if ~(arr instanceof Array) {
	console.log('請輸入陣列')
}
var arr = [];
Array.isArray(arr)

web APIs

DOMDOM樹

  • 文件:一個頁面就是一個文件,DOM中使用document表示
  • 元素:頁面中的所有標籤都是元素,DOM中使用element表示
  • 節點:網頁中的所有內容都是節點(標籤、屬性、文字、註釋),DOM中使用node表示
獲取頁面素

script 要寫在頁面元素下方

根據ID獲取

若元素存在返回元素物件,元素不存在返回null

var time = document.getElementById('time');

console.dir(time);  // 列印元素物件 更好的檢視裡面的屬性方法
根據標籤名獲取

getElementsByTagName()

獲取元素物件的集合(偽陣列)
若元素不存在返回空的偽陣列

document.getElementsByTagName()
element.getElementsByTagName()

var uls = document.getElementsByTagName('ul');
var li = uls[0].getElementsByTagName('li');

根據類名獲取

HTML5 新增
getElementsByClassName()

var boxs = document.getElementsByClassName('box');
querySelector

返回選擇器選中的第一個物件

var firstBox = document.querySelector('.box');  // 根據類選擇
console.log(firstBox);
var nav = document.querySelector('#nav');  // 根據id選擇
console.log(nav);
var li = document.querySelector('li');  // 根據標籤選擇
console.log(li)
querySelectorAll

返回選中的所有元素

var boxAll = document.querySelectorAll('.box');
獲取特殊元素

body,html

document.body // 獲取body元素

document.documentElement  // 返回html元素

事件

事件源
事件型別
事件處理程式

事件源

事件被觸發的物件(元素)

事件型別

如何觸發,比如滑鼠點選(onclick)

事件處理程式

事件觸發時執行的程式

var btn = document.getElementById('btn');  // 獲取事件源
// btn.onclick  註冊事件(繫結事件)
btn.onclick = function() {			// 新增事件處理程式
	alert('hello');					
}
滑鼠事件觸發條件
onclick滑鼠點選左鍵觸發
onmouseover滑鼠進過觸發
onmouseout滑鼠離開觸發
onfocus獲得滑鼠焦點觸發
onblur失去滑鼠焦點觸發
onmousemove滑鼠移動觸發
onmouseup滑鼠抬起觸發
onmousedown滑鼠按下觸發
修改元素內容

element.innerText = ‘元素顯示的內容’
element.innerText 可以獲取元素內容
自動去除html標籤,去除空格,換行
不識別HTML標籤,

var btn = document.querySelector('button');
var div = document.querySelector('div');
var count = 0;
btn.onclick = function() {
    count++;
    div.innerText = count;
}

element.innerHTML = ‘元素顯示的內容’
element.innerHTML 可以獲取元素內容
W3C標準

修改元素屬性

element.屬性 = 屬性值

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>

</head>
<body>
    <button>計數器</button>
    <div>0</div>
    <script>
        var btn = document.querySelector('button');
        var div = document.querySelector('div');
        var count = 0;
        btn.onclick = function() {
            count++;
            div.innerText = count;
            this.disabled = true;  // this指向方法的呼叫者btn
        }
    </script>
</body>
</html>
修改樣式

element.style 行內樣式操作
元素屬性值 採用 駝峰命名法

display:none 隱藏元素
display:block 顯示元素

element.className 類名樣式操作

相關文章