主頁 > 前端設計 > JavaScript之爆肝匯總【萬字長文?值得收藏】

JavaScript之爆肝匯總【萬字長文?值得收藏】

2021-08-07 08:26:10 前端設計

目錄

  • 一、JavaScript簡單入門
    • 1.1.一門客戶端腳本語言
    • 1.2.JavaScript發展史
    • 1.3.JavaScript優勢
    • 1.4.JavaScript參考
    • 1.5.JavaScript輸出的幾種方式
    • 1.6.JavaScript有哪些關鍵字
    • 1.7.JavaScript注釋
    • 1.8.JavaScript常見識別符號有哪些
    • 1.9.JavaScript常見HTML事件有哪些
    • 1.10.JavaScript常見運算子
    • 1.11.JavaScript常見賦值運算子
    • 1.12.JavaScript常見比較運算子
    • 1.13.JavaScript常見邏輯運算子
  • 二、細講JavaScript基礎語法
    • 2.1.變數
      • 2.1.1.定義一個變數
      • 2.1.2.變數命名規則及規范
    • 2.2.資料型別
      • 2.2.1.Number
      • 2.2.2.String
      • 2.2.3.Boolean
      • 2.2.4.Undefined
      • 2.2.5.Null
      • 2.2.6.Object
    • 2.3.資料型別的轉換
      • 2.3.1.轉換成數值型別
      • 2.3.2.轉換成字串型別
      • 2.3.3.轉換成布爾型別
    • 2.4.運算子
    • 2.5.運算子的優先級
    • 2.6.函式
      • 2.6.1.簡介
      • 2.6.2.函式使用
    • 2.7.JavaScript正則運算式
      • 2.7.1.創建正則運算式
      • 2.7.2.String中正則運算式方法
      • 2.7.3.RegExp物件的方法
      • 2.7.4.修飾符
      • 2.7.5.元字符
    • 2.8.JavaScript常用物件
      • 2.8.1.Date物件
      • 2.8.2.String物件
      • 2.8.3.Math物件
      • 2.8.4.陣列物件
    • 2.9.JSON
      • 2.9.1.stringify()
      • 2.9.2.toJSON()
      • 2.9.3.parse()
    • 2.10.Ajax
      • 2.10.1.創建步驟:
      • 2.10.2.ajax在jQuery中的應用
      • 2.10.3.GET方法
      • 2.10.4.POST方法
      • 2.10.5.get與post區別
    • 2.11.Cookie
      • 2.11.1.js中cookie的讀取操作
      • 2.11.2.cookie簡單存盤操作
      • 2.11.3.cookie設定過期時間
      • 2.11.4.cookie修改
      • 2.11.5.cookie洗掉
    • 2.12.回圈
      • 2.12.1.for回圈
      • 2.12.2.Array.forEach()
      • 2.12.3.while
      • 2.12.4.do...while
      • 2.12.5.for...in
  • 三、JavaScript新特性
  • 文章到此就結束了 有幫助的朋友記得三連支持呦😘


一、JavaScript簡單入門

1.1.一門客戶端腳本語言

運行在客戶端瀏覽器中的,每一個瀏覽器都有JavaScript的決議引擎
腳本語言:不需要編譯,直接就可以被瀏覽器決議執行了
功能:可以來增強用戶和html頁面的互動程序,可以來控制html元素,讓頁面有一些動態的效果,增強用戶的體驗

1.2.JavaScript發展史

1992年,Nombase公司,開發出第一門客戶端腳本語言,專門用于表單的校驗,命名為 : C-- ,后來更名為:ScriptEase
1995年,Netscape(網景)公司,開發了一門客戶端腳本語言:LiveScript,后來,請來SUN公司的專家,修改LiveScript,命名為JavaScript
1996年,微軟抄襲JavaScript開發出JScript語言
1997年,ECMA(歐洲計算機制造商協會),制定出客戶端腳本語言的標準:ECMAScript,就是統一了所有客戶端腳本語言的編碼方式,

JavaScript = ECMAScript + JavaScript自己特有的東西(BOM+DOM)

1.3.JavaScript優勢

a.解釋性語言
b.基于物件
c.事件驅動
d.弱型別
e.安全性高
f.跨平臺

1.4.JavaScript參考

如需在 HTML 頁面中插入 JavaScript,請使用 <script> 標簽,
<script> 和 </script> 會告訴 JavaScript 在何處開始和結束,
<script> 和 </script> 之間的代碼行包含了 JavaScript

<script type="text/javascript" src="${request.contextPath}/static/js/homepage.js"></script>

1.5.JavaScript輸出的幾種方式

window.alert()
document.write()
innerHTML
console.log()

就個人使用來看 console.log()在編程中使用是較多切方便的 直接F12控制臺即可查看輸出內容

1.6.JavaScript有哪些關鍵字

在這里插入圖片描述

1.7.JavaScript注釋

// 這是代碼:單句注釋,在編輯器一般是ctrl + L鍵,
/* 這是代碼 */:多行注釋,在編輯器一般是ctrl + shift + L鍵,

1.8.JavaScript常見識別符號有哪些

在這里插入圖片描述

1.9.JavaScript常見HTML事件有哪些

在這里插入圖片描述

1.10.JavaScript常見運算子

在這里插入圖片描述

1.11.JavaScript常見賦值運算子

在這里插入圖片描述

1.12.JavaScript常見比較運算子

在這里插入圖片描述

1.13.JavaScript常見邏輯運算子

在這里插入圖片描述

二、細講JavaScript基礎語法

2.1.變數

2.1.1.定義一個變數

// 宣告一個變數名為test的變數,
var test;
var age, name, sex;//宣告age、name、sex三個變數
//同時宣告變數并賦值
var age = 10, name = "小強", sex = "1";

2.1.2.變數命名規則及規范

1、由字母、數字、下劃線、💲符號組成,不能以數字開頭
2、不能使用關鍵字,例如:while
3、區分大小寫
規范:約定俗成的寫法
1、變數名要有意義.
2、遵守駝峰命名法,駝峰命名法:首字母小寫,后面單詞首字母大寫,例如userName.

2.2.資料型別

其中資料型別有:Number型別、String型別、Boolean型別、Undefined型別、Null型別、Object型別

2.2.1.Number

Number數字型別:包含整數和小數
可以表示:十進制、八進制、十六進制

如:

var num = 10; //十進制
var num1 = 012; //八進制
var num2 = ox123; //十六進制

數值范圍:

console.log(Number.MAX_VALUE); //最大值 值為5e-324
console.log(Number.MIN_VALUE); // 最小值 值為1.7976931348623157e+308
無窮大:Infinity
無窮小:-Infinity

數值判斷不可以用小數驗證小數以及不要用NaN驗證是不是NaN (NaN----not a number) 但是可以用isNaN— is not a number結果是不是NaN
如:

var num; //宣告一個變數,未賦值
console.log(isNaN(num)); // true 不是一個數字嗎? 結果是true

2.2.2.String

字串轉義符:

轉義序列字符
\b退格
\f走紙換頁
\n換行
\r回車
\t橫向跳格(Ctrl-I)
\‘單引號
\“雙引號
\雙斜杠

eg:

var str = "iam a pm\\"
console.log(str); // iam a pm\

字串拼接:

var str1 = "先生";
var str2 = "您好";
console.log(str1+str2); // 先生您好

若是字串和數字拼接 結果也是字串 拼接效果如上所示

2.2.3.Boolean

布爾型別的話兩個屬性 true/false

2.2.4.Undefined

undefined表示一個宣告了沒有賦值的變數,變數只宣告的時候值默認是undefined
如:

var num;
console.log(num); // undefined

2.2.5.Null

Null表示一個空,變數的值如果想為null,必須手動設定

2.2.6.Object

2.3.資料型別的轉換

2.3.1.轉換成數值型別

(1)、Number()可以把任意值轉換成數值,如果要轉換的字串中有一個不是數值的字符,回傳NaN
如:

var num1 = Number("10");
console.log(num1); // 10
var num2 = Number('10adbdn');
console.log(num2); //NaN
var num3 = Number("10.78");
console.log(num3); //10.78
var num4 = Number('10.65dd');
console.log(num4); //NaN
var num5 = Number("a10");
console.log(num5); //NaN

(2)、parseInt()轉整數
如:

var num1 = parseInt("10");
console.log(num1); // 10
var num2 = parseInt('10adbdn');
console.log(num2); //10
var num3 = parseInt("10.78");
console.log(num3); //10
var num4 = parseInt('10.65dd');
console.log(num4); //10
var num5 =parseInt("a10");
console.log(num5); //NaN

(3)、parseFloat()轉小數
如:

var num1 = parseFloat("10");
console.log(num1); // 10
var num2 = parseFloat('10adbdn');
console.log(num2); //10
var num3 = parseFloat("10.78");
console.log(num3); //10
var num4 = parseFloat('10.65dd');
console.log(num4); //10
var num5 = parseFloat("a10");
console.log(num5);

(4)、Number()、parseInt()、parseFloat()三者的區別
Number()要比parseInt()和parseFloat()嚴格.
parseInt()和parseFloat()相似,parseFloat會決議第一個. 遇到第二個.或者非數字結束

2.3.2.轉換成字串型別

(1)、toString()
如:

var num = 10;
console.log(num.toString()); // 字串 10

(2)、String()
如:

var num1 =5;
console.log(String(num1)); // 字串 5

(2)、JSON.stringfy()

2.3.3.轉換成布爾型別

0、空字串、null 、undefined 、NaN 會轉換成false 其它都會轉換成true
如:

var num1 = Boolean(0);
console.log(num1); // false
var num2 = Boolean("");
console.log(num2); // false
var num3 = Boolean(null);
console.log(num3); // false
var num4 = Boolean(undefined);
console.log(num4); // false
var num5 = 10;
var num6;
console.log(Boolean(num5+num6)); // false

2.4.運算子

運算子種類:算數運算子、復合運算子、關系運算子、邏輯運算子

(1)、算數運算子:“+”“-”“*”“/”“%”
算數運算運算式:由算數運算子連接起來的運算式 復合運

(2)、復合運算子:“+=”“-=”“*=”“/=”“%=”
復合運算運算運算式:由復合運算子連接起來的運算式

(3)、關系運算子:“>”“<”“>=”“<=”“”“=”“!=”“!==”
關系運算運算式:由關系運算子連接起來的運算式

(4)、邏輯運算子:“&&”“||”“!”
邏輯運算運算式:由邏輯運算子連接起來的運算式

運算式1 && 運算式2
如果有一個為false,整個的結果就是false

運算式1 || 運算式2
如果有一個為true,整個的結果就是false

! 運算式
運算式的結果是true,整個的結果為false
運算式的結果是false,整個的結果為true

2.5.運算子的優先級

由高到低:

() 優先級最高
一元運算子 ++ – !
算數運算子 先* / % 后 + -
關系運算子 > >= < <=
相等運算子 == != === !==
邏輯運算子 先&& 后||
賦值運算子

2.6.函式

2.6.1.簡介

JavaScript中的函式就是物件,物件是“名/值”對的集合并擁有一個連到原型物件的隱藏連接,物件字面量產生的物件連接到Object.prototype,函式物件連接到Function.prototype(該原型物件本身連接到Object.prototype),每個函式在創建時會附加兩個隱藏屬性:函式的背景關系和實作函式行為的代碼

2.6.2.函式使用

function functionname(){
這里是要執行的代碼
}

語法:
圓括號可包括由逗號分隔的引數:

(引數 1, 引數 2, …)

由函式執行的代碼被放置在花括號中:{}

function name(引數 1, 引數 2, 引數 3) {
    要執行的代碼
}

函式引數(Function parameters)是在函式定義中所列的名稱,
函式引數(Function arguments)是當呼叫函式時由函式接收的真實的值

函式的呼叫:

//此處創建一個函式sum
function sum(num1, num2) {
    var result = num1 + num2;
    console.log("num1 + num2 = " + result);
}

// 函式呼叫
sum(10, 20);

立即執行函式:

$(function(){
	//不只有函式 所有變數輸出等等在這里寫都是頁面加載直接運行
	sum()
})

2.7.JavaScript正則運算式

2.7.1.創建正則運算式

字面量,語法:Reg = /pattern/modifiers; 字面量的正則由兩個正斜桿組成//,第一個正斜桿后面寫規則:/pattern[規則可以寫各式各樣的元字符|量詞|字集|斷言…],第二個正斜桿后面寫識別符號/modifiers[g全域匹配 | i忽略大小寫 | m換行匹配 | ^起始位置 | $結束位置] 識別符號,
var Reg = /box/gi;
建構式,語法 Reg = new RegExp( pattern , modifiers ); pattern ,modifiers此時是字串,何種方法創建都是一樣的,pattern 模式 模板,要匹配的內容,modifiers 修飾符,

var Reg = new RegExp("box","gi");

2.7.2.String中正則運算式方法

方法描述
String.match(Reg)回傳RegExp匹配的包含全部字串的陣列或null
String.search(Reg)回傳RegExp匹配字串首次出現的位置
String.replace(Reg, newStr)用newStr替換RegExp匹配結果,并回傳新字串
String.split(Reg)回傳字串按指定RegExp拆分的陣列
var str = 'a1b2c3a4a5',
    reg = /a/g;
console.log(str.match(reg)); //["a", "a", "a"]

var str = 'a1b2c3a4a5',
    reg = /a/;
console.log(str.search(reg)); //0

var str = 'a1b2c3a4a5',
    reg = /a/g;
console.log(str.replace(reg,function(){
    console.log(arguments);
    return 5555;
}));

var str = 'a,b,c,d',
    reg = /,/g;
//console.log(str.split(',')); //["a", "b", "c", "d"]
console.log(str.split(reg)) //["a", "b", "c", "d"]

2.7.3.RegExp物件的方法

方法描述
RegExp.exec(String)在字串中執行匹配搜索,回傳首次匹配結果陣列
RegExp.test(String)在字串中測驗模式匹配,回傳true或false

2.7.4.修飾符

修飾符也稱作識別符號,可指定匹配的模式,修飾符用于執行區分大小寫和全域匹配,
i忽略大小寫匹配,
g全域匹配,沒有g只匹配第一個元素,就不在進行匹配,
m執行多行匹配

var patt =  /pattern/i;         //忽略大小寫匹配
var patt =  /pattern/g;         //全域匹配
var patt =  /pattern/m;         //執行多行匹配

2.7.5.元字符

在正則運算式中具有特殊意義的專用字符,
特殊的轉譯字符. \ /,

. 單個任意字符,除了換行符\n與制表符\r 
\ 轉義字符,將具有特殊意義的符號轉義成普通符號: \.
\d 數字[0~9]
\D 非數字
\s 空格
\S 非空格
\w 字符[字母|數字|下劃線]
\W 非字符
\b 單詞邊界( 除了 (字)字母 數字_ 都算單詞邊界) 
\B 非單詞邊界
var reg = /\./;//匹配.
var reg = /\\/;//匹配\
var reg = /\//;//匹配/

var str = '\\';
var reg = /\\/g;
console.log(reg.test(str)); //true

2.8.JavaScript常用物件

2.8.1.Date物件

Date物件是一個有關日期和時間的物件,它具有動態性,必須試用new關鍵字創建一個實體,如:
var Mydata=new Date();
Date物件沒有提供直接訪問的屬性,只有獲取和設定日期的方法,如下表

在這里插入圖片描述

2.8.2.String物件

String物件是JavaScript提供的字串處理物件,創建物件實體后才能參考,它提供了對字串進行處理的屬性和方法(類似java一樣)具體如下表:
屬性 length —回傳字串中字符的個數,
注意:一個漢字也是一個字符!!

在這里插入圖片描述

2.8.3.Math物件

屬性:
在這里插入圖片描述
Math物件方法:

三角函式(sin(), cos(), tan(),asin(), acos(), atan(), atan2())是以弧度回傳值的,可以通過除法Math.PI / 180把弧度轉換為角度,也可以通過其他方法來轉換,

方法說明
Math.abs(x)回傳x的絕對值.
Math.acos(x)回傳x的反余弦值.
Math.acosh(x)回傳x的反雙曲余弦值.
Math.asin(x)回傳x的反正弦值.
Math.asinh(x)回傳x的反雙曲正弦值.
Math.atan(x)以介于 -PI/2 與 PI/2 弧度之間的數值來回傳 x 的反正切值.
Math.atanh(x)回傳 x 的反雙曲正切值.
Math.atan2(x, y)回傳 y/x 的反正切值.
Math.cbrt(x)回傳x的立方根.
Math.ceil(x)回傳x向上取整后的值.
Math.clz32(x)Returns the number of leading zeroes of a 32-bit integer.
Math.cos(x)回傳x的余弦值.
Math.cosh(x)回傳x的雙曲余弦值.
Math.exp(x)回傳 Ex, 當x為引數, E 是歐拉常數 (2.718…), 自然對數的底.
Math.expm1(x)回傳 exp(x)-1 的值.
Math.floor(x)回傳小于x的最大整數,
Math.fround(x)Returns the nearest single precision float representation of a number.
Math.hypot([x[,y[,…]]])Returns the square root of the sum of squares of its arguments.
Math.imul(x)Returns the result of a 32-bit integer multiplication.
Math.log(x)Returns the natural logarithm (loge, also ln) of a number.
Math.log1p(x)Returns the natural logarithm of 1 + x (loge, also ln) of a number.
Math.log10(x)Returns the base 10 logarithm of x.
Math.log2(x)Returns the base 2 logarithm of x.
Math.max([x[,y[,…]]])回傳0個到多個數值中最大值.
Math.min([x[,y[,…]]])回傳0個到多個數值中最小值.
Math.pow(x,y)回傳x的y次冪.
Math.random()回傳0到1之間的偽亂數. 可能等于0,但是一定小于1
Math.round(x)回傳四舍五入后的整數.但是Math.round(-4.40)值為-4
Math.sign(x)回傳x的符號函式, 判定x是正數,負數還是0.
Math.sin(x)回傳正弦值.
Math.sinh(x)回傳x的雙曲正弦值.
Math.sqrt(x)回傳x的平方根.
Math.tan(x)回傳x的正切值.
Math.tanh(x)回傳x的雙曲正切值.
Math.toSource()回傳字串 “Math”.
Math.trunc(x)回傳x的整數部分,去除小數.

例子1:寫一個函式,回傳從min到max之間的隨機整數,包括min不包括max

function getRandomArbitrary(min, max) {
  return min + Math.random() * (max - min);
}

例子2:寫一個函式,生成一個長度為 n 的隨機字串,字串字符的取值范圍包括0到9,a到 z,A到Z

function getRandomInt(min, max) {
  return min + Math.floor(Math.random() * (max - min + 1));
}

function randomStr(n){
  var dict = '1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
  var str = '';
  for(i = 0; i < n;i++){
    str += dict[getRandomInt(0,62)];
  }
  return str;
}
var str = getRandStr(10);
console.log(str);

2.8.4.陣列物件

陣列的分類**
1、二維陣列,二維陣列的本質是陣列中的元素又是陣列,

var arr = [[1,2],[a,b]];
alert(arr[1][0]); //a 第2列第1行所在的元素

2、稀疏陣列

稀疏陣列是包含從0開始的不連續索引的陣列,在稀疏陣列中一般length屬性值比實際元素個數大(不常見)
舉例

var a=["a",,"b",,,,"c",,];

陣列物件屬性

屬性作用
length 屬性表示陣列的長度,即其中元素的個數
prototype 屬性回傳物件型別原型的參考
constructor 屬性表示創建物件的函式

1.length屬性:

alert(arr.length); //顯示陣列的長度10
arr.length=15; //增大陣列的長度,length屬性是可變的
alert(arr.length); //顯示陣列的長度已經變為15

2.prototype 屬性

prototype 屬性回傳物件型別原型的參考,prototype 屬性是object共有的,
objectName.prototype
objectName 引數是object物件的名稱,
說明:用 prototype 屬性提供物件的類的一組基本功能, 物件的新實體“繼承”賦予該物件原型的操作,
對于陣列物件,用以下例子說明prototype 屬性的用途,
給陣列物件添加回傳陣列中最大元素值的方法,要完成這一點,宣告一個函式,將它加入 Array.prototype, 并使用它,

function array_max( ){
   var i, max = this[0];
   for (i = 1; i < this.length; i++){
       if (max < this[i])
       max = this[i];
   }
   return max;
}
Array.prototype.max = array_max;
var x = new Array(1, 2, 3, 4, 5, 6);
var y = x.max( );

3.constructor 屬性

constructor 屬性表示創建物件的函式,
object.constructor //object是物件或函式的名稱,
說明:constructor 屬性是所有具有prototype 的物件的成員,它們包括除 Global 和 Math物件以外的所有JScript固有物件,constructor屬性保存了對構造特定物件實體的函式的參考,

例如:

x = new String("Hi");
if (x.constructor == String) // 進行處理(條件為真),
//或
function MyFunc {
// 函式體,
}
y = new MyFunc;
if (y.constructor == MyFunc) // 進行處理(條件為真),

Array的物件方法
說明:部分是ECMAScript5的新特性(IE678不支持)

方法作用
concat()連接兩個或者更多的陣列,并回傳結果
join()將陣列的元素組起一個字串
pop()洗掉并回傳陣列的最后一個元素
push()陣列末尾添加一個或者多個元素,回傳新的長度
reverse顛倒陣列中元素的順序
shift()洗掉并回傳陣列的第一個元素
slice()從某個已有的陣列回傳選定的元素
sort()對陣列元素排序
splice()洗掉元素,并向陣列添加新元素
toSource()回傳該物件的源代碼
toString()把陣列轉化為字串并回傳結果
toLocalString()把陣列轉化為本地元素并回傳結果
unshift向陣列開頭添加一個或者更多的元素,并回傳新的長度
valueof()回傳陣列物件的原始值
forEach()遍歷陣列物件
map()對陣列做一些映射
filter()過濾
every()檢查判斷
some()檢查判斷
reduce()兩兩執行一定的操作
reduceRight()從右到左執行操作
indexOf()陣列檢索查找某個元素
Array.isArray([])判斷是否是陣列

主要對一些新特性進行講解

concat
concat作用是拼接陣列,需要注意的是也可以把一個陣列元素作為拼接的元素,如果這樣的話,陣列會被拉平,再和其它的元素拼接起來成為新的陣列,但是不會被拉平兩次,concat不會修改原陣列,

例如:

var arr=[1,2,3,4,5];
arr.concat([10,11],13);//[1,2,3,4,5,10,11,13]
arr.concat([1,[2,3]]);//[1,2,3,4,5,1,[1,3]]

slice
slice(a,b)a和b可以取負數,表示從a位置開始截取到b位置的一段陣列,是一個左閉右開的區間,a和b可以取負數,如果是負數代表倒數第a/b個元素

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

splice
splice洗掉元素并向陣列添加新元素
object.splice(a)從左邊開始洗掉a個元素
object.splice(a,b)從a位置開始截取其中的b個元素
object.splice(a,b,c,d)從a位置開始截取b個元素,并將c和d或者更多的元素插入原陣列
需要注意的是splice會修改原陣列

var arr=[1,2,3,4,5];
arr.splice(2);//[3,4,5]
arr;//[1,2];原陣列被修改了

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

var arr=[1,2,3,4,5];
arr.splice(11,‘a’,‘b’);//[2]
arr;//[1,"a","b",3,4,5];

foreach
foreach()函式從頭到尾把陣列遍歷一遍,有三個引數分別是:陣列元素,元素的索引,陣列本身

var arr = [1, 2, 3, 4, 5];
arr.forEach(function(x, index, a)
{//分別對應:陣列元素,元素的索引,陣列本身
    console.log(x + '|' + index + '|' + (a === arr));
});
// 1|0|true
// 2|1|true
// 3|2|true
// 4|3|true
// 5|4|true

reduce()
Array的reduce()把一個函式作用在這個Array的[x1, x2, x3…]上,這個函式必須接收兩個引數,reduce()把結果繼續和序列的下一個元素做累積計算,其效果就是:

[x1, x2, x3, x4].reduce(f) = f(f(f(x1, x2), x3), x4)
var arr = [1, 2, 3];
var sum = arr.reduce(function(x, y) {
     return x + y
}, 0); //引數 0是可選的,如果寫了引數0那第一次傳遞的兩個值就是0和1
如果不寫第一次傳遞的就是陣列的前兩個值,計算結果是6
arr; //[1, 2, 3]

arr = [3, 9, 6];
var max = arr.reduce(function(x, y) {
     console.log(x + "|" + y);
     return x > y ? x : y;
});
// 3|9
// 9|6
max; // 9

陣列和一般物件的比較

陣列/一般物件
相同點都可以繼承,物件不一定是陣列,都可以當做物件添加屬性
不同點陣列自動更新length按索引訪問陣列比訪問一般物件屬性明顯迅速,陣列物件繼承Array.prototype上的大量陣列操作方法

陣列和字串的比較

陣列 /字串
相同點字串是陣列的一種
不同點字串是不可變的陣列,字串沒有陣列的方法

2.9.JSON

2.9.1.stringify()

用于把js物件序列化為JSON字串

var person={
name:"xiaoming",
age:12
}

var json=JSON.stringify(person); //{"name":"xiaoming","age":12}

stringify() 除了可以接受物件外,還可以接受2個引數,第一個引數是過濾器,可以是物件屬性的陣列集合,也可以是函式;第二個引數是一個選項,表示是否在JSON字串中保留縮進

陣列過濾器:

json=JSON.stringify(person,['name']); //{"name":"xiaoming"}

函式過濾器:

json=JSON.stringify(person,function(key,value){
    switch(key){
        case "name":
           return value+",wang";
        case "age":
           return undefined;
        default:
           return value;
    }
});
//{"name":"xiaoming,wang"}

注意,如果函式回傳undefined,則該屬性就會被忽略;

字串縮進:

json=JSON.stringify(person,null,4);
{
    "name": "xiaoming",
    "age": 12
}

2.9.2.toJSON()

向物件添加toJSON()方法:

var person={
    name:"xiaoming",
    age:12,
    toJSON:function(){
        return this.name+" is "+this.age;
    }
}

json=JSON.stringify(person);
console.log(json); //"xiaoming is 12"

2.9.3.parse()

parse()除了接受json字串外,也可以接受一個函式引數,該函式接受2個值,一個鍵和一個值;

var person=JSON.parse('{"name":"xiaoming","age":12}');
var person=JSON.parse('{"name":"xiaoming","age":12}',function(key,value){
    if(key=="age"){
        return value+10;
    }
    else{
        return value;
    }
});

2.10.Ajax

2.10.1.創建步驟:

1.創建一個XMLHttpRequest異步物件
2.設定請求方式和請求地址
3.接著,用send發送請求
4.監聽狀態變化
5.最后,接識訓傳的資料

例:

const xhr = new XMLHttpRequest()
xhr.open('GET', './data/test.json', true)
xhr.onreadystatechange = function () {
  if (xhr.readyState === 4) {
    if (xhr.status === 200) {
      console.log(JSON.parse(xhr.responseText))
    } else {
      console.log('其它情況...')
    }
  }
}
xhr.send()

2.10.2.ajax在jQuery中的應用

$.ajax({
                    type:"post",  //請求方式
                    url:"a.php", //服務器的鏈接地址
                    dataType:"json", //傳送和接受資料的格式
                    data:{
                        username:"james",
                        password:"123456"
                    },
                    success:function(data){//接受資料成功時呼叫的函式
                       console.log(data);//data為服務器回傳的資料
                    },
                    error:function(request){//請求資料失敗時呼叫的函式
                        alert("發生錯誤:"+request.status);
                    }
});

2.10.3.GET方法

結構

$.get( url,[ data ][ callback ][ type ])

引數解釋:
在這里插入圖片描述

//步驟一:創建異步物件
var ajax = new XMLHttpRequest();
//步驟二:設定請求的url引數,引數一是請求的型別,引數二是請求的url
ajax.open("get", "users.json");
//步驟三:發送請求
ajax.send();
//步驟四:注冊事件 onreadystatechange 狀態改變就會呼叫
ajax.onreadystatechange = function () {
    if (ajax.readyState == 4 && ajax.status == 200) {
        //步驟五:如果能夠進到這個判斷,說明資料完美的回來了,并且請求的頁面是存在的
        console.log(ajax.responseText);//輸入回應的內容
    }
};

2.10.4.POST方法

它與$.get( )方法的結構和使用方式都相同,不過之間仍然有一下區別

2.10.5.get與post區別

1.post的安全性高于get;如果以get方式請求,請求引數會拼接到url后面,安全性性低,以post方式請求,請求引數會包裹在請求體中,安全性更高
2.數量區別:get方式傳輸的資料量小,規定不能超過2kb,post方式請求資料量大,沒有限制,
3.傳輸速度:get的傳輸速度高于post
因為使用方法相同,因此只要改變jQuery函式,就可以將程式在GET請求和POST請求之間切換

2.11.Cookie

2.11.1.js中cookie的讀取操作

function getCookie(c_name){
    if (document.cookie.length>0){  //先查詢cookie是否為空,為空就return ""
      c_start=document.cookie.indexOf(c_name + "=")  //通過String物件的indexOf()來檢查這個cookie是否存在,不存在就為 -1  
      if (c_start!=-1){ 
        c_start=c_start + c_name.length+1  //最后這個+1其實就是表示"="號啦,這樣就獲取到了cookie值的開始位置
        c_end=document.cookie.indexOf(";",c_start)  //其實我剛看見indexOf()第二個引數的時候猛然有點暈,后來想起來表示指定的開始索引的位置...這句是為了得到值的結束位置,因為需要考慮是否是最后一項,所以通過";"號是否存在來判斷
        if (c_end==-1) c_end=document.cookie.length  
        return unescape(document.cookie.substring(c_start,c_end))  //通過substring()得到了值,想了解unescape()得先知道escape()是做什么的,都是很重要的基礎,想了解的可以搜索下,在文章結尾處也會進行講解cookie編碼細節
      } 
    }
    return ""
  } 

2.11.2.cookie簡單存盤操作

$.cookie("groupCode",222)

2.11.3.cookie設定過期時間

document.cookie = "name=value;expires=date"

2.11.4.cookie修改

document.cookie = "username=zhangsan";
document.cookie = "username=lisi";
var cookies = document.cookie;
console.log(cookies);

2.11.5.cookie洗掉

document.cookie = "username=zhangsan";
document.cookie = "username=; expires=Thu, 01 Jan 1970 00:00:00 GMT";
var cookies = document.cookie;
console.log(cookies);

2.12.回圈

2.12.1.for回圈

for是最常用的回圈,主要用來回圈陣列

let arr = [1,2,3];
for (let i=0; i<arr.length; i++){
 console.log(i,arr[i])
}
// 0 1
// 1 2
// 2 3

2.12.2.Array.forEach()

語法:arr.forEach(callback(currentValue [, index [, array]])[, thisArg]);

callback為陣列中每個元素執行的函式,該函式接收三個引數,currentValue(陣列中正在處理的當前元素),index(陣列中正在處理的當前元素的索引),array(forEach() 方法正在操作的陣列)

thisArg為當執行回呼函式 callback 時,用作 this 的值,

let arr = [1, 2,  , 3]
let arrCopy1 = []
arr.map((item, index, arr) => {
     arrCopy1.push(item * 2)
})
console.log(arrCopy1)
// [2, 4, 6]

forEach() 為每個陣列元素執行一次 callback 函式
那些已洗掉或者未初始化的項將被跳過(例如在稀疏陣列上)
與map()和reduce()不同的是,它沒有回傳值,總是回傳undefind,
forEach()除了拋出例外以外,沒有辦法中止或跳出 forEach() 回圈,

2.12.3.while

while 陳述句可以在某個條件運算式為真的前提下,回圈執行指定的一段代碼,直到那個運算式不為真時結束回圈

示例:

let n = 0;

while (n < 3) {
  n++;
}

console.log(n);
// expected output: 3

注:使用break陳述句在condition計算結果為真之前停止回圈

2.12.4.do…while

do…while 陳述句創建一個執行指定陳述句的回圈,直到condition值為 false,在執行statement 后檢測condition,所以指定的statement至少執行一次

示例:

const list = ['a', 'b', 'c']
let i = 0
do {
  console.log(list[i]) //value
  console.log(i) //index
  i = i + 1
} while (i < list.length)

2.12.5.for…in

for…in回圈可以用來遍歷物件的可列舉屬性串列(包括[[Prototype]]鏈)

主要用于遍歷物件,通過屬性串列可以獲取屬性值

for (let property in object) {
  console.log(property) //property name
  console.log(object[property]) //property value
}

三、JavaScript新特性

參考此文:js新特性

文章到此就結束了 有幫助的朋友記得三連支持呦😘

轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/292200.html

標籤:其他

上一篇:簡單了解HTML

下一篇:cgb2106-day09

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • vue移動端上拉加載

    可能做得過于簡單或者比較low,請各位大佬留情,一起探討技術 ......

    uj5u.com 2020-09-10 04:38:07 more
  • 優美網站首頁,頂部多層導航

    一個個人用的瀏覽器首頁,可以把一下常用的網站放在這里,平常打開會比較方便。 第一步,HTML代碼 <script src=https://www.cnblogs.com/szharf/p/"js/jquery-3.4.1.min.js"></script> <div id="navigate"> <ul> <li class="labels labels_1"> ......

    uj5u.com 2020-09-10 04:38:47 more
  • 頁面為要加<!DOCTYPE html>

    最近因為寫一個js函式,需要用到$(window).height(); 由于手寫demo的時候,過于自信,其實對前端方面的認識也不夠體系,用文本檔案直接敲出來的html代碼,第一行沒有加上<!DOCTYPE html> 導致了$(window).height();的結果直接是整個document的高 ......

    uj5u.com 2020-09-10 04:38:52 more
  • WordPress網站程式手動升級要做好資料備份

    WordPress博客網站程式在進行升級前,必須要做好網站資料的備份,這個問題良家佐言是遇見過的;在剛開始接觸WordPress博客程式的時候,因為升級問題和博客網站的修改的一些嘗試,良家佐言是吃盡了苦頭。因為購買的是西部數碼的空間和域名,每當佐言把自己的WordPress博客網站搞到一塌糊涂的時候 ......

    uj5u.com 2020-09-10 04:39:30 more
  • WordPress程式不能升級為5.4.2版本的原因

    WordPress是一款個人博客系統,受到英文博客愛好者和中文博客愛好者的追捧,并逐步演化成一款內容管理系統軟體;它是使用PHP語言和MySQL資料庫開發的,用戶可以在支持PHP和MySQL資料庫的服務器上使用自己的博客。每一次WordPress程式的更新,就會牽動無數WordPress愛好者的心, ......

    uj5u.com 2020-09-10 04:39:49 more
  • 使用CSS3的偽元素進行首字母下沉和首行改變樣式

    網頁中常見的一種效果,首字改變樣式或者首行改變樣式,效果如下圖。 代碼: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, ......

    uj5u.com 2020-09-10 04:40:09 more
  • 關于a標簽的講解

    什么是a標簽? <a> 標簽定義超鏈接,用于從一個頁面鏈接到另一個頁面。 <a> 元素最重要的屬性是 href 屬性,它指定鏈接的目標。 a標簽的語法格式:<a href=https://www.cnblogs.com/summerxbc/p/"指定要跳轉的目標界面的鏈接">需要展示給用戶看見的內容</a> a標簽 在所有瀏覽器中,鏈接的默認外觀如下: 未被訪問的鏈接帶 ......

    uj5u.com 2020-09-10 04:40:11 more
  • 前端輪播圖

    在需要輪播的頁面是引入swiper.min.js和swiper.min.css swiper.min.js地址: 鏈接:https://pan.baidu.com/s/15Uh516YHa4CV3X-RyjEIWw 提取碼:4aks swiper.min.css地址 鏈接:https://pan.b ......

    uj5u.com 2020-09-10 04:40:13 more
  • 如何設定html中的背景圖片(全屏顯示,且不拉伸)

    1 <style>2 body{background-image:url(https://uploadbeta.com/api/pictures/random/?key=BingEverydayWallpaperPicture); 3 background-size:cover;background ......

    uj5u.com 2020-09-10 04:40:16 more
  • Java學習——HTML詳解(上)

    HTML詳解 初識HTML Hyper Text Markup Language(超文本標記語言) 1 <!--DOCTYPE:告訴瀏覽器我們要使用什么規范--> 2 <!DOCTYPE html> 3 <html lang="en"> 4 <head> 5 <!--meta 描述性的標簽,描述一些 ......

    uj5u.com 2020-09-10 04:40:33 more
最新发布
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 07:59:23 more
  • 生產事故-走近科學之消失的JWT

    入職多年,面對生產環境,盡管都是小心翼翼,慎之又慎,還是難免捅出簍子。輕則滿頭大汗,面紅耳赤。重則系統停擺,損失資金。每一個生產事故的背后,都是寶貴的經驗和教訓,都是專案成員的血淚史。為了更好地防范和遏制今后的各類事故,特開此專題,長期更新和記錄大大小小的各類事故。有些是親身經歷,有些是經人耳傳口授 ......

    uj5u.com 2023-04-18 07:55:04 more
  • 記錄--Canvas實作打飛字游戲

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 打開游戲界面,看到一個畫面簡潔、卻又富有挑戰性的游戲。螢屏上,有一個白色的矩形框,里面不斷下落著各種單詞,而我需要迅速地輸入這些單詞。如果我輸入的單詞與螢屏上的單詞匹配,那么我就可以獲得得分;如果我輸入的單詞錯誤或者時間過長,那么我就會輸 ......

    uj5u.com 2023-04-04 08:35:30 more
  • 了解 HTTP 看這一篇就夠

    在學習網路之前,了解它的歷史能夠幫助我們明白為何它會發展為如今這個樣子,引發探究網路的興趣。下面的這張圖片就展示了“互聯網”誕生至今的發展歷程。 ......

    uj5u.com 2023-03-16 11:00:15 more
  • 藍牙-低功耗中心設備

    //11.開啟藍牙配接器 openBluetoothAdapter //21.開始搜索藍牙設備 startBluetoothDevicesDiscovery //31.開啟監聽搜索藍牙設備 onBluetoothDeviceFound //30.停止監聽搜索藍牙設備 offBluetoothDevi ......

    uj5u.com 2023-03-15 09:06:45 more
  • canvas畫板(滑鼠和觸摸)

    <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>canves</title> <style> #canvas { cursor:url(../images/pen.png),crosshair; } #canvasdiv{ bo ......

    uj5u.com 2023-02-15 08:56:31 more
  • 手機端H5 實作自定義拍照界面

    手機端 H5 實作自定義拍照界面也可以使用 MediaDevices API 和 <video> 標簽來實作,和在桌面端做法基本一致。 首先,使用 MediaDevices.getUserMedia() 方法獲取攝像頭媒體流,并將其傳遞給 <video> 標簽進行渲染。 接著,使用 HTML 的 < ......

    uj5u.com 2023-01-12 07:58:22 more
  • 記錄--短視頻滑動播放在 H5 下的實作

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 短視頻已經無數不在了,但是主體還是使用 app 來承載的。本文講述 H5 如何實作 app 的視頻滑動體驗。 無聲勝有聲,一圖頂百辯,且看下圖: 網址鏈接(需在微信或者手Q中瀏覽) 從上圖可以看到,我們主要實作的功能也是本文要講解的有: ......

    uj5u.com 2023-01-04 07:29:05 more
  • 一文讀懂 HTTP/1 HTTP/2 HTTP/3

    從 1989 年萬維網(www)誕生,HTTP(HyperText Transfer Protocol)經歷了眾多版本迭代,WebSocket 也在期間萌芽。1991 年 HTTP0.9 被發明。1996 年出現了 HTTP1.0。2015 年 HTTP2 正式發布。2020 年 HTTP3 或能正... ......

    uj5u.com 2022-12-24 06:56:02 more
  • 【HTML基礎篇002】HTML之form表單超詳解

    ??一、form表單是什么

    ??二、form表單的屬性

    ??三、input中的各種Type屬性值

    ??四、標簽 ......

    uj5u.com 2022-12-18 07:17:06 more