1.整數(shù)轉(zhuǎn)任意位小數(shù)
? ??function formatToFixed (val){
????????let sNum = val;?
? ? ? ? let nNum = parseFloat(sNum);?
? ? ? ? ?if(!isNaN(nNum)) {?
? ????????? return nNum.toFixed(2);?
? ? ? ? ? ?}else{
? ? ???????????? return val;
? ? ???????? }
????????}
2. reduce函數(shù)可以完成疊加,例:
? ??????var items = [10, 120, 1000];
? ? ? ? //參數(shù)1:回調(diào)函數(shù);? 參數(shù)2: 初始值
? ? ? ? //reduce返回值不是一個數(shù)組,結果類型和形參初始值類型相同
? ? ? ? ?var total = items.reduce((sumSoFar, item)=>sumSoFar + item, 0);
? ? ? ? ?console.log(total); // 1130
3.合并json數(shù)據(jù)
function extend(des, src, override) {
if(src instance of Array) {
for(var i = 0, len = src.length; i < len; i++)
extend(des, src[i], override);
}
for(var i in src) {
if(override || !(i in des)) {
des[i] = src[i];
}
}
return des;
}
var a = {
"a": "1",
"b": "2"
}
var b = {
"c": "3",
"d": "4",
"e": "5"
}
extend(a, b);
console.log(JSON.stringify(a));
4./*解決使用vue進入頁面閃現(xiàn)源碼*/
[v-cloak] {
display: none;
}
在包裹的元素上添加v-cloak即可(例如:<div id="xxx" v-cloak></div>)
5.訪問對象也可以 對象["鍵"],如person["name"]
6.局部 JavaScript 變量
????在 JavaScript 函數(shù)內(nèi)部聲明的變量(使用 var)是局部變量,所以只能在函數(shù)內(nèi)部訪問它焕济。(該變量的作用域是局部的)稳吮。您可以在不同的函數(shù)中使用名稱相同的局部變量闺阱,因為只有聲明過該變量的函數(shù)才能識別出該變量。只要函數(shù)運行完畢,本地變量就會被刪除淑玫。
7.JavaScript 變量的生存期
????JavaScript 變量的生命期從它們被聲明的時間開始。
????局部變量會在函數(shù)運行以后被刪除面睛。
????全局變量會在頁面關閉后被刪除絮蒿。
8.向未聲明的 JavaScript 變量分配值
????如果您把值賦給尚未聲明的變量,該變量將被自動作為 window 的一個屬性叁鉴。如carname="Volvo";將聲明 window 的一個屬性 carname土涝。非嚴格模式下給未聲明變量賦值創(chuàng)建的全局變量,是全局對象的可配置屬性幌墓,可以刪除但壮。
9.作用域
? ??如果變量在函數(shù)內(nèi)沒有聲明(沒有使用 var 關鍵字)冀泻,該變量為全局變量。
? ??在 HTML 中, 全局變量是 window 對象: 所有數(shù)據(jù)變量都屬于 window 對象蜡饵。
10.轉(zhuǎn)義
? ??反斜杠是一個轉(zhuǎn)義字符弹渔。 轉(zhuǎn)義字符將特殊字符轉(zhuǎn)換為字符串字符:轉(zhuǎn)義字符 (\) 可以用于轉(zhuǎn)義撇號,換行溯祸,引號肢专,等其他特殊字符。
11.typeof x :檢測變量數(shù)據(jù)類型,并返回(string/object/array)
12.=== 為絕對相等焦辅,即數(shù)據(jù)類型與值都必須相等博杖。
13.字符串方法
charAt() 返回指定索引位置的字符
charCodeAt() 返回指定索引位置字符的 Unicode 值
concat() 連接兩個或多個字符串,返回連接后的字符串
fromCharCode() 將 Unicode 轉(zhuǎn)換為字符串
indexOf() 返回字符串中檢索指定字符第一次出現(xiàn)的位置
lastIndexOf() 返回字符串中檢索指定字符最后一次出現(xiàn)的位置
localeCompare() 用本地特定的順序來比較兩個字符串
match() 找到一個或多個正則表達式的匹配
replace() 替換與正則表達式匹配的子串
search() 檢索與正則表達式相匹配的值
slice() 提取字符串的片斷氨鹏,并在新的字符串中返回被提取的部分
split() 把字符串分割為子字符串數(shù)組
substr() 從起始索引號提取字符串中指定數(shù)目的字符
substring() 提取字符串中兩個指定的索引號之間的字符
toLocaleLowerCase() 根據(jù)主機的語言環(huán)境把字符串轉(zhuǎn)換為小寫欧募,只有幾種語言(如土耳其語)具有地方特有的大小寫映射
toLocaleUpperCase() 根據(jù)主機的語言環(huán)境把字符串轉(zhuǎn)換為大寫,只有幾種語言(如土耳其語)具有地方特有的大小寫映射
toLowerCase() 把字符串轉(zhuǎn)換為小寫
toString() 返回字符串對象值
toUpperCase() 把字符串轉(zhuǎn)換為大寫
trim() 移除字符串首尾空白
valueOf() 返回某個字符串對象的原始值
14.null是一個只有一個值的特殊類型仆抵。表示一個空對象引用跟继。用 typeof 檢測 null 返回是object。你可以設置為 null 來清空對象
? ??var?person =?null;?// 值為 null(空), 但類型為對象
15.你可以設置為 undefined 來清空對象:
????????var?person = undefined;?// 值為 undefined, 類型為 undefined
16.undefined?是一個沒有設置值的變量,typeof?一個沒有值的變量會返回?undefined镣丑。
undefined 和 null 的區(qū)別:
? ??null?用于對象,?undefined?用于變量 ;
? ? 對象只有被定義才有可能為 null舔糖,否則為 undefined;?
? ??null 和 undefined 的值相等,但類型不等:
? ??typeof?undefined?????????????// undefined
? ??typeof?null??????????????????// object
? ? ?null?=== undefined???????????// false? ? ??
? ? ?null?== undefined????????????// true??
請注意:NaN 的數(shù)據(jù)類型是 number
? ? ? ? ? ? ??數(shù)組(Array)的數(shù)據(jù)類型是 object
? ????????????日期(Date)的數(shù)據(jù)類型為 object
? ????????????null 的數(shù)據(jù)類型是 object? ?
? ? ? ? ? ? ? ?未定義變量的數(shù)據(jù)類型為 undefined? ?
17.constructor?屬性返回所有 JavaScript 變量的構造函數(shù)莺匠。
? ??????????"John".constructor?// 返回函數(shù) String()? { [native code] }
18.全局方法?String()?可以將數(shù)字轉(zhuǎn)換為字符串金吗。
19.Date方法
????????getDate() 從? Date 對象返回一個月中的某一天 (1 ~ 31)。
????????getDay() 從? Date 對象返回一周中的某一天 (0 ~ 6)趣竣。
????????getFullYear()? 從 Date 對象以四位數(shù)字返回年份摇庙。
????????getHours()? 返回 Date 對象的小時 (0 ~ 23)。
????????getMilliseconds()? 返回 Date 對象的毫秒(0 ~ 999)遥缕。
????????getMinutes()? 返回 Date 對象的分鐘 (0 ~ 59)卫袒。
????????getMonth()? 從 Date 對象返回月份 (0 ~ 11)。
????????getSeconds()? 返回 Date 對象的秒數(shù) (0 ~ 59)单匣。
????????getTime()? 返回 1970 年 1 月 1 日至今的毫秒數(shù)夕凝。
????????getTime()? 返回 1970 年 1 月 1 日至今的毫秒數(shù)。
20.全局方法?Number()?可以將字符串轉(zhuǎn)換為數(shù)字户秤÷氡空字符串轉(zhuǎn)換為 0。
其他的字符串會轉(zhuǎn)換為 NaN (不是個數(shù)字)鸡号。
? ??????Number(" ")?// 返回 0?
????????Number("")?// 返回 0
????????Number("99 88")?// 返回 NaN
21.parseFloat()解析一個字符串转砖,并返回一個浮點數(shù)。
? ? ? parseInt()解析一個字符串鲸伴,并返回一個整數(shù)堪藐。
22.+?可用于將變量轉(zhuǎn)換為數(shù)字
? ??????var?y =?"5";?// y 是一個字符串
????????var?x = + y;?// x 是一個數(shù)字
23.全局方法?Number()?可將布爾值轉(zhuǎn)換為數(shù)字莉兰。
????????Number(false)?????// 返回 0
? ??????Number(true)? ????// 返回 1
24.全局方法?Number()?可將日期轉(zhuǎn)換為數(shù)字。
25.debugger?關鍵字用于停止執(zhí)行 JavaScript礁竞,并調(diào)用調(diào)試函數(shù)。
這個關鍵字與在調(diào)試工具中設置斷點的效果是一樣的杉辙。
如果沒有調(diào)試可用模捂,debugger 語句將無法工作。
26.變量提升:函數(shù)聲明和變量聲明總是會被解釋器悄悄地被"提升"到方法體的最頂部蜘矢。
? ??????JavaScript 中狂男,函數(shù)及變量的聲明都將被提升到函數(shù)的最頂部。
????????JavaScript 中品腹,變量可以在使用后聲明岖食,也就是變量可以先使用再聲明。
JavaScript 只有聲明的變量會提升舞吭,初始化的不會泡垃。
var?x =?5;?// 初始化 xelem = document.getElementById("demo");?// 查找元素?
elem.innerHTML = x +?" "?+ y;// 顯示 x 和 y? // x為5,y為undefind
var?y =?7;?// 初始化 y
實例的 y 輸出了?undefined,這是因為變量聲明 (var y) 提升了羡鸥,但是初始化(y = 7) 并不會提升蔑穴,所以 y 變量是一個未定義的變量。
27.函數(shù)提升
????????1惧浴、函數(shù)提升:就是把函數(shù)聲明提到作用域的頂部
????????2存和、函數(shù)有兩種表達方式:函數(shù)聲明方式和函數(shù)表達方式
? ? ? ? 3、只有函數(shù)聲明方式才能提升
28.** 塊級作用域**
? ??????在每個代碼塊中 JavaScript 不會創(chuàng)建一個新的作用域衷旅,一般各個代碼塊的作用域都是全局的捐腿。ES5只有全局作用域和函數(shù)作用域,沒有塊級作用域柿顶,這帶來很多不合理的場景
? ?? 1茄袖、避免由于變量提升,內(nèi)層變量可能會覆蓋外層變量九串;?
? ??2绞佩、避免用來計數(shù)的循環(huán)變量泄露為全局變量;??
? ??3猪钮、ES6允許塊級作用域的任意嵌套, 外層作用域無法讀取內(nèi)層作用域的變量, 內(nèi)層作用域可以定義外層作用域的同名變量品山;??
? ??4、塊級作用域可以替代立即執(zhí)行的匿名函數(shù)的功能?
? ??5烤低、ES5(嚴格模式)規(guī)定肘交,函數(shù)只能在頂層作用域和函數(shù)作用域之中聲明,不能在塊級作用域聲明
? ???6扑馁、ES6允許在塊級作用域之中聲明函數(shù)涯呻,只在大括號情況下可行凉驻,沒有大括號會報錯;函數(shù)聲明類似于var复罐,存在函數(shù)提升??
? ? ? ?例:?{{{{ {let insane = 'Hello World'} console.log(insane); // 報錯}}}};
? ? ? ? ? ? ?{{{{ let insane = 'Hello World'; {let insane = 'Hello World'}}}}};???
注意:環(huán)境導致的行為差異太大涝登,應該避免在塊級作用域內(nèi)聲明函數(shù)。 若需要效诅,也應該寫成函數(shù)表達式胀滚,而不是函數(shù)聲明語句
28.href="#"與href="javascript:void(0)"的區(qū)別
? ??????#?包含了一個位置信息,默認的錨是#top?也就是網(wǎng)頁的上端乱投。在頁面很長的時候會使用?#?來定位頁面的具體位置咽笼,格式為:# + id。
????????而javascript:void(0), 僅僅表示一個死鏈接戚炫。
29.** 暫時性死區(qū)**
????????只要一進入當前作用域剑刑,所要使用的變量就已經(jīng)存在,但是不可獲取双肤,只有等到聲明變量的那一行代碼出現(xiàn)施掏,才可以獲取和使用該變量。
30.** let與var區(qū)別**
//不同之處
????1杨伙、let聲明的變量只在let所在的代碼塊內(nèi)有效
????2其监、var有變量提升,則聲明之前使用不會報錯限匣;let沒有變量提升抖苦,聲明前使用會報錯
????3、let存在暫時性死區(qū)米死,只要塊級作用域內(nèi)存在let命令锌历,它所聲明的變量就“綁定”(binding)這個區(qū)域,不再受外部的影響
? ???4.ES6規(guī)定峦筒,若區(qū)塊中存在let和const命令究西,這個區(qū)塊對這些命令聲明的變量,從一開始就形成了封閉作用域物喷。凡在聲明前就使用這些變量卤材,均報錯。
????5.ES6規(guī)定暫時性死區(qū)和let峦失、const語句不出現(xiàn)變量提升扇丛,主要是為了減少運行時錯誤。
? ? 6.let不允許在相同作用域內(nèi)尉辑,重復聲明同一個變量 ,var可以
31.在( )和[ ]前的語句不加分號會報錯;
32:原型鏈(也叫隱式原型鏈):
? ? ? ? 訪問一個對象的屬性時,先在自身里面找,找到了返回;如果沒有在沿著__proto__這條鏈yi一級一級向上找,如果找不到返回undefined;
? ? ? ? 1>.函數(shù)的顯示原型指向的對象默認是空的Object對象實例對象(但Object不滿足);
????????2>.所有函數(shù)都是Function的實例(包含F(xiàn)unction);
? ? ? ? 3>.Object的原型對象是原型鏈的盡頭;
33.閉包理解:
? ? ? ? 閉包是嵌套的內(nèi)部函數(shù)
? ? 產(chǎn)生閉包的條件:
? ? ? ? ? ? 1>.函數(shù)嵌套;
? ? ? ? ? ? 2>.內(nèi)部函數(shù)引用外部函數(shù)的變量或函數(shù);
? ? ? ? ? ? 3>.執(zhí)行定義內(nèi)部函數(shù)就會產(chǎn)生閉包,不用執(zhí)行內(nèi)部函數(shù);
? ? ? ?外部函數(shù)調(diào)用幾次就產(chǎn)生幾個閉包(外部函數(shù)調(diào)用,才會聲明內(nèi)部函數(shù));
? ? 閉包的生命周期:
? ? ? ? ? ? ? ? 產(chǎn)生:定義內(nèi)部函數(shù)時產(chǎn)生;
? ? ? ? ? ? ? ? 死亡:在嵌套的內(nèi)部函數(shù)成為垃圾對象時消失;
? ? 閉包缺點:會造成內(nèi)存泄漏:
? ? ? ? ? ? 解決辦法: 1>.能不用閉包就不用
? ? ? ? ? ? ? ? ? ? ? ? ? ? 2>.要及時釋放;
? ? 內(nèi)存溢出:所需要的內(nèi)存空間大于剩余的內(nèi)存時,就會拋出內(nèi)存溢出的錯誤
? ? 內(nèi)存泄漏:占用的內(nèi)存空間沒有及時釋放;
? ? ? ? ? ? ? ? ? ? 內(nèi)存泄漏的積累最終會導致內(nèi)存溢出;
? ? ?造成內(nèi)存泄漏的可能:
? ? ? ? ? ? ? ? 1>.定時器或回調(diào)函數(shù)沒有及時清理;
? ? ? ? ? ? ? ? 2>.意外的全局變量;
? ? ? ? ? ? ? ? 3>.閉包
34.//獲取請求信息
var curPath = window.document.location.href;
//http://localhost:8070/map/ztreemap.html
var pathName = window.document.location.pathname;
///map/ztreemap.html
var pos = curPath.indexOf(pathName);
//獲取請求地址
var Host = curPath.substring(0, pos);
//http://localhost:8070
35. 子頁面中調(diào)用父頁面中函數(shù):
? ??????window.parent.window.父頁面函數(shù)();
36.添加請求頭
? ?? var param = { channel: "1", plate: "豫AB8309" };
? ? param = JSON.stringify(param);
? ? $.ajax({
? ? ? ? type: "POST",
? ? ? ? timeout: 10000,
? ? ? ? //dataType: 'json',
? ? ? ? cache: false,
? ? ? ? async: 'true',
? ? ? ? beforeSend: function (xhr) {
? ? ? ? ? ? xhr.setRequestHeader("Authorization", "Bearer eyJhbGciOiJIUzUxMiJ9.eyJleHAiOjE1NTkwMzM2NjAsInVzZXIiOnsieWhJZCI6MjIyMjIyLCJ5aExvZ29ubmFtZSI6ImdkcyIsInloUGFzc3dvcmQiOiJlMTBhZGMzOTQ5YmE1OWFiYmU1NmUwNTdmMjBmODgzZSIsInloTmFtZSI6ImdkcyIsInF4SWQiOjUsInloVGVsIjpudWxsLCJkc0lkIjoxLCJ5eklkIjoxLCJzaW1Db2RlIjoiMSIsIm1zZyI6bnVsbCwidmVyaWZ5IjpmYWxzZX0sInN1YiI6ImdkcyJ9.2H7DFLdRE5NzPvqa96UVIxtMUNXZ_VhfMn0JwMq3dasB12oF-aB4mioiavYoFS1L6umBOQPltZMbSCYGV0qnuA");
? ? ? ? ? ? xhr.setRequestHeader("Content-Type", "application/json");
? ? ? ? },
? ? ? ? url: "http://192.168.0.174:8080/api/video/getVideoUrl",
? ? ? ? data: param,
? ? ? ? success: function (data) {
? ? ? ? ? ? console.log(data);
? ? ? ? },
? ? ? ? error: function (err) {
? ? ? ? },
? ? ? ? complete: function () {
? ? ? ? }
37.select設置默認選中
? ??var select = document.getElementById("clId");
????for(var i=0;i<select.length;i++){
????????if(select[i].value == checkedCarNO){
????????????select[i].selected = true;
????????}
????}
38.校驗車牌號碼
//新能源車牌號正則
var xreg=/^[京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領A-Z]{1}[A-Z]{1}(([0-9]{5}[DF]$)|([DF][A-HJ-NP-Z0-9][0-9]{4}$))/;
//普通車牌號正則
var creg=/^[京津滬渝冀豫云遼黑湘皖魯新蘇浙贛鄂桂甘晉蒙陜吉閩貴粵青藏川寧瓊使領A-Z]{1}[A-Z]{1}[A-HJ-NP-Z0-9]{4}[A-HJ-NP-Z0-9掛學警港澳]{1}$/;
/**
* 校驗車牌號碼
* @param carNo 車牌號碼
* @returns
*/
function carNoReg(carNo){
if(carNo.length == 7){
return creg.test(carNo);
}else if(carNo.length == 8){
return xreg.test(carNo);
}
}