js基礎
1.資料類型
JS組成
ECMAScript——JavaScript文法
DOM——頁面文檔對象模型
BOM——浏覽器對象模型
資料存儲機關
大小關系:bit < byte < kb < GB < TB<.....
- 位(bit): 1bit 可以儲存一個 0 或者 1 (最小的存儲機關)
- 位元組(Byte):1B = 8b
- 千位元組(KB):1KB = 1024B
- 兆位元組(MB):1MB = 1024KB
- 吉位元組(GB): 1GB = 1024MB
- 太位元組(TB): 1TB = 1024GB
輸入輸出語句
方法 | 說明 | 歸屬 |
---|---|---|
alert(msg) | 浏覽器彈出警示框 | 浏覽器 |
console.log(msg) | 浏覽器控制台列印輸出資訊 | 浏覽器 |
prompt(info) | 浏覽器彈出輸入框,使用者可以輸入 | 浏覽器 |
alert() 主要用來顯示消息給使用者,console.log() 用來給程式員自己看運作時的消息。
聲明變量
// 聲明變量
var age; // 聲明一個 名稱為age 的變量
指派
變量的初始化
聲明一個變量并指派, 我們稱之為變量的初始化。
資料類型簡介
- Nunber 數字型,包含整型和浮點型,在JS中八進制前面加0,十六進制前面加 0x
alert(Number.MAX_VALUE); // 1.7976931348623157e+308
alert(Number.MIN_VALUE); // 5e-324
alert(Infinity); // Infinity 無窮大
alert(-Infinity); // -Infinity 無窮小
alert(NaN); // NaN , Not a number,代表一個非數值
isNaN用來判斷一個變量是否為非數字的類型,傳回 true 或者 false
文法: var 變量名A = isNaN(變量名B)
- String 字元串型
轉義符 解釋說明 \n 換行符,n 是 newline 的意思 \ \ 斜杠 \ ’ ’ 單引号 " ”雙引号 \t tab 縮進 \b 空格 ,b 是 blank 的意思
字元串長度 —— 文法:文法: var 變量名A = 變量名B.length
字元串拼接
多個字元串之間可以使用 + 進行拼接,其拼接方式為 字元串 + 任何類型 = 拼接之後的新字元串
拼接前會把與字元串相加的任何類型轉成字元串,再拼接成一個新的字元串
如果變量兩側都有字元串拼接,口訣“引引加加 ”,删掉數字,變量寫加中間
- Boolean 布爾值類型,如true、false,等價于1和0、
- Undefined 未定義——一個聲明後沒有被指派的變量會有一個預設值undefined
- Null 空值——一個聲明變量給 null 值,裡面存的值為空
擷取變量資料類型
typeof 可用來擷取檢測變量的資料類型
var num = 18;
console.log(typeof num) // 結果 number
資料類型轉換
-
轉換為字元串
1.toString() 文法:alert(變量名.toString())
2.String()強制轉換 文法:alert(String(變量名))
3.加号拼接字元串:和字元串拼接的結果都是字元串(隐式轉換)
-
轉換為數字型
1.parseInt(string)函數 文法:parseInt(’string‘)
2.parseFloat(string)函數 文法:parseInt(’string‘)
3.Number()強制轉換 文法:Numer(‘string’)
4.js隐式轉換:利用算術運算隐式轉換為數值型 比如:‘12’-0
-
轉換為布爾型
Boolean()函數 文法:Boolean(‘string’)
關鍵字
包括:break、case、catch、continue、default、delete、do、else、finally、for、function、if、in、instanceof、new、return、switch、this、throw、try、typeof、var、void、while、with 等。
2.運算符、流程控制、循環
遞增運算符
++num 前置遞增,就是自加1,類似于 num = num + 1,但是 ++num 寫起來更簡單。
使用口訣:先自加,後傳回值
num++ 後置遞增,就是自加1,類似于 num = num + 1 ,但是 num++ 寫起來更簡單。
使用口訣:先傳回原值,後自加
比較運算符
< > <== >== == != === !==
邏輯運算符
與&& 或|| 非!
流程控制
if 語句
// 适合于檢查多重條件。
if (條件表達式1) {
語句1;
} else if (條件表達式2) {
語句2;
} else if (條件表達式3) {
語句3;
....
} else {
// 上述條件都不成立執行此處代碼
}
三元表達式
表達式1 ? 表達式2 : 表達式3;
switch分支流程控制
switch( 表達式 ){
case value1:
// 表達式 等于 value1 時要執行的代碼
break;
case value2:
// 表達式 等于 value2 時要執行的代碼
break;
default:
// 表達式 不等于任何一個 value 時要執行的代碼
}
注意: 執行case 裡面的語句時,如果沒有break,則繼續執行下一個case裡面的語句。
for循環
for(初始化變量; 條件表達式; 操作表達式 ){
//循環體
}
while循環
while (條件表達式) {
// 循環體代碼
}
do-while循環
do {
// 循環體代碼 - 條件表達式為 true 時重複執行循環體代碼
} while(條件表達式);
continue
continue 關鍵字用于立即跳出本次循環,繼續下一次循環(本次循環體中 continue 之後的代碼就會少執行一次)
break
立即跳出整個循環(循環結束)
3.數組、函數
建立數組
- 利用 new 建立數組
注意 Array () ,A 要大寫var 數組名 = new Array() ; var arr = new Array(); // 建立一個新的空數組
- 利用數組字面量建立數組
//1. 使用數組字面量方式建立空的數組 var 數組名 = []; //2. 使用數組字面量方式建立帶初始值的數組 var 數組名 = ['小白','小黑','大黃','瑞奇'];
數組中新增元素
函數的使用
聲明函數
// 聲明函數
function 函數名() {
//函數體代碼
}
調用函數
// 調用函數
函數名(); // 通過調用函數名來執行函數體代碼
函數的參數
- 形參:函數定義時設定接收調用時傳入
- 實參:函數調用時傳入小括号内的真實資料
函數的傳回值
return 語句
- 在使用 return 語句時,函數會停止執行,并傳回指定的值
- 如果函數沒有 return ,傳回的值是 undefined
arguments的使用
當不确定有多少個參數傳遞的時候,可以用 arguments 來擷取
arguments展示形式是一個僞數組,可以進行周遊
- 具有 length 屬性
- 按索引方式儲存資料
- 不具有數組的 push , pop 等方法
4.作用域、預解析、對象
JavaScript(es6前)中的作用域有兩種:
全局作用域 在函數内部沒有聲明直接指派的變量屬于全局變量
局部作用域(函數作用域)
預解析
- 預解析:在目前作用域下, JS 代碼執行之前,浏覽器會預設把帶有 var 和 function 聲明的變量在記憶體中進行提前聲明或者定義。
-
代碼執行: 從上到下執行JS語句。
預解析會把變量和函數的聲明在代碼執行之前執行完成。
對象
所有的事物都是對象,對象是由屬性和方法組成的
- 屬性:事物的特征,在對象中用屬性來表示(常用名詞)
- 方法:事物的行為,在對象中用方法來表示(常用動詞)
建立對象的三種方式
1.利用字面量建立對象
var 對象名 = {
屬性1:屬性值1;
屬性2:屬性值2;
.......
sayHi : function(){
alert('大家好啊~');
}
};
調用對象——對象名.屬性名 或 對象名[‘屬性名’]
調用對象方法——對象名.方法名()
2.利用 new Object 建立對象
通過内置構造函數Object建立對象,此時變量已經儲存了建立出來的空對象
通過對象操作屬性和方法的方式,來為對象增加屬性和方法
比如——對象名1.屬性1=’XXX‘;
3.利用構造函數建立對象
function 構造函數名(形參1,形參2,形參3) {
this.屬性名1 = 參數1;
this.屬性名2 = 參數2;
this.屬性名3 = 參數3;
this.方法名 = 函數體;
}
構造函數的調用格式
var obj = new 構造函數名(實參1,實參2,實參3)
以上代碼中,obj即接收到構造函數建立出來的對象
周遊對象
其文法如下:
for (var 變量 in 對象名字) {
// 在此執行代碼
}
5.内置對象
Math對象
屬性、方法名 | 功能 |
---|---|
Math.PI | 圓周率 |
Math.floor() | 向下取整 |
Math.ceil() | 向上取整 |
Math.round() | 四舍五入版 就近取整 注意 -3.5 結果是 -3 |
Math.abs() | 絕對值 |
Math.max()/Math.min() | 求最大和最小值 |
Math.random() | 擷取範圍在[0,1)内的随機數 |
// Math随機數方法 包含兩端的2個數字
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
console.log(getRandom(1, 10));
日期對象
- 擷取目前時間必須執行個體化:
- 擷取指定時間的日期對象
var future = new Date('2019/5/1');//或者 ('2019-10-10 8:8:8')
// 傳回目前年份
console.log(date.getFullYear());
// 傳回目前月份 數值比實際月份小1 需要+1
console.log(date.getMonth() + 1);
// 傳回目前日期是本月的多少日
console.log(date.getDate());
// 傳回目前日期是周幾 注意:傳回目前是周幾 周日傳回值為0
console.log(date.getDay());
// 傳回目前小時
console.log(date.getHours());
// 傳回目前分鐘
console.log(date.getMinutes());
// 傳回目前秒鐘
console.log(date.getSeconds());
- 擷取總毫米數
基于1970年1月1日(世界标準時間)起的毫秒數
擷取總毫秒數如下
// 執行個體化Date對象
var now = new Date();
// 1. 用于擷取對象的原始值
console.log(date.valueOf())
console.log(date.getTime())
// 2. 簡單寫可以這麼做
var now = + new Date();
// 3. HTML5中提供的方法,有相容性問題
var now = Date.now();
數組對象
檢測是否為數組
1.instanceof 可以判斷一個對象是否是某個構造函數的執行個體 傳回值為true或者false
文法:數組名 instanceof Array
比如:console.log(arr instanceof Array);
2**.Array.isArray(數組名)**用于判斷一個對象是否為數組 傳回值為true或者false 是 HTML5 中提供的方法
添加删除數組元素
方法名 | 說明 | 傳回值 |
---|---|---|
push(參數1…) | 末尾添加一個或多個元素–數組名.push(要添加的) | 新的長度 |
pop() | 删除最後一個元素,數組長度減一 | 删除的元素值 |
unshift(參數1…) | 開頭添加一個或多個元素 | 新的長度 |
shift() | 删除第一個元素,數組長度減一 | 第一個元素值 |
注意:push、unshift為增加元素方法;pop、shift為删除元素的方法
數組排序
方法名 | 說明 |
---|---|
reverse() | 颠倒數組中元素順序 |
sort() | 對數組的元素進行排序 |
注意:sort方法需要傳入參數來設定升序、降序排序
- 如果傳入“function(a,b){ return a-b;}”,則為升序
- 如果傳入“function(a,b){ return b-a;}”,則為降序
數組轉換為字元串
1.toString() 把數組轉換成字元串,逗号分隔每一項
2.join(‘分隔符’) 把數組中的所有元素轉換為一個字元串
注意:二者均傳回一個字元串,join方法如果不傳入參數,則按照 “ , ”拼接元素
數組對象轉換為字元串格式
JSON.stringify()
其他方法
數組連接配接 concat(‘連接配接内容’)
數組截取字元串 slice(截取的起始位置,截取的數量)
數組替換 replace(‘被替換的字元’,‘替換為的字元’) 隻會替換第一個
數組根據索引号删除相關内容 splice(索引号,從索引号處開始要删除的數量 )
字元串對象
js 會把基本資料類型包裝為複雜資料類型
字元串轉換為數組對象
JSON.parse()
字元串操作方法
連接配接字元串 str.concat(‘連接配接内容’)
查找字元串 str.substr(start,length) 從start位置開始,length取的個數
截取字元串 slice(start,end) 從start位置開始,截取到end位置,end取不到
替換字元串 str.replace(‘被替換的字元’,‘替換為的字元’) 隻會替換第一個
字元轉換為數組 str.split(‘分隔符’)