除數取整:
1.只保留整數部分:parseInt(5/2)
2.向上取整,有小數就整數部分加1:Math.ceil(5/2)
3,四舍五入:Math.round(9/2)
4,向下取整:Math.floor(5/2)
大小寫:
1.使字符串全部變為小寫:toLowerCase() \ toLocaleLowerCase()
2.使全部字符變為大寫:toUpperCase() \ toLocaleUpperCase()
字符串相關
1.返回指定索引的字符:charAt()
2.字符串拼接:concat()
3.取從第幾位到指定長度的字符串:substr()
var stringValue = "hello world"; console.log(stringValue.substr(3)); //"lo world" console.log(stringValue.substr(3,7)); //"lo worl"
4.取介於兩個指定下標之間的字符串:substring()
var stringValue = "hello world"; console.log(stringValue.substring(3)); //"lo world" console.log(stringValue.substring(3,7)); //"lo w"
5.返回一個新的數組,介於兩個指定下標之間的字符串:slice()
var stringValue = "hello world"; console.log(stringValue.slice(3)); //"lo world" console.log(stringValue.slice(3,7)); //"lo w"
6.返回子字符串的位置(沒有找到返回-1):首次的位置:IndexOf、最后的位置:lastIndexOf
var stringValue = "hello world"; console.log(stringValue.indexOf("o")); //4 console.log(stringValue.lastIndexOf("o")); //7
7. 刪除頭尾的空格:trim()
8.檢索指定的值:match()
var str1 = "lixiaoqi"; console.log(str1.match('iao')); //檢索字符串,返回的是字符 console.log(str1.match('lll')); //沒有指定的字符,返回的是null

9.返回指定的第一個匹配項的索引(未檢測到返回-1):search()
10.替換現有字符串:.replace()
11.把字符串分割成字符串數組:split(分隔符)
數組相關
1. 返回從原數組中指定開始下標到結束下標之間的項組成的新數組(原數組不變):slice()
var arr = [1,2,3,4,5,6,7,8]; console.log(arr.slice(4)); //從4開始到結束 [5, 6, 7, 8] console.log(arr.slice(2,6));//數組下表從0開始,從2開始,到6的前一個位置結束 [3, 4, 5, 6]
2.splice()
刪除(2個參數,起始位置,刪除的項數)
插入(3個參數,起始位置,刪除的項數,插入的項)
替換(任意參數,起始位置,刪除的項數,插入任意數量的項數)
var arr = [1,2,3,4,5]; console.log(arr.slice(2,3)); // 實際得到的新數組的項數是end-strat [3] console.log(arr.slice(1,5)); // [2, 3, 4, 5]
3.將參數添加到數組的最后,返回新數組的長度:push()
var arr = [1,2,3,4,5]; console.log(arr.push(6,7,8)); // 返回的是新數組的長度 8
4.刪除數組的最后一個元素,返回被刪除的值(減少數組的長度):pop()
var arr = ['a', 'b', 'c', 'd', 'e']; console.log(arr.pop()); // e console.log(arr.length); // 4
5.向數組的開頭添加一個或多個的元素,並返回新的長度:unshift()
var arr = [1,2,3,4,5]; console.log(arr.unshift(2,4,5,{name:'liqi'})); //返回的是新數組的長度 9
6.刪除數組的第一個參數,數組的長度減1:shift()
var arr = ['a', 'b', 'c', 'd', 'e']; console.log(arr.shift()); // 返回的是刪除的數組的值 a
7.按指定的參數對數組進行排序,返回的值是經過排序后的數組: sort()
var arr = [1,'q',3,6,2,'a',9]; console.log(arr.sort()); // 返回的是排序后的數組 [1, 2, 3, 6, 9, "a", "q"]
8.將數組中的元素進行反轉,倒序顯示:reverse()
var arr = [1,2,3,4,5] console.log(arr.reverse()); // [5, 4, 3, 2, 1]
9.把兩個字符串連接起來,返回的值是一個副本:concat(a, b)
var arr1 = [1,'q',3,6,2,'a',9]; console.log(arr1.concat('-', arr1)); //新創建一個數組,原數組不變 [1, "q", 3, 6, 2, "a", 9, "-", 1, "q", 3, 6, 2, "a", 9] console.log(arr1); //原數組不變 [1,'q',3,6,2,'a',9]
10.用分隔符將數組的元素組成一個字符串:join()
var arr1 = [1,'q',3,6,2,'a',9]; console.log(arr1.join(',')); //以逗號分隔 1,q,3,6,2,a,9 console.log(arr1.join(' ')); //以空格分隔 1 q 3 6 2 a 9
11.從數組的開頭向后查找,(接受兩個參數,要查找的項和查找起點的位置索引):indexOf()
var arr = [1,2,3,4,5,6,78]; console.log(arr.indexOf(78, 2)); // 查找78所在的位置,返回的項的索引 6 console.log(arr.indexOf(3, 1)); // 2 console.log(arr.indexOf(2)); // 1
12.從數組末尾開始獲取:lastIndexof()
13.遍歷數組:for
var arr = [1, 4, 9, 16]; for (var i = 0; i < arr.length; i++){ console.log(arr[i]); }
14.對數組的每個元素執行一次提供的函數:foeEach()
var arr = ['a', 'b', 'c']; arr.forEach(function(item) { console.log(item); // a // b // c });
15.對數組的每一項運行給定的函數,返回沒戲函數調用的結果組成的數組:map()
var arr = [1, 4, 9, 16]; console.log(arr.map(x => x * 2)); //對數組的每項*2 [2, 8, 18, 32]
16.通過檢查指定數組中符合條件的所有元素(不會改變原始數組):filter()
var arr = [1,12,7,8,5] function fn(i) { return i > 5; } console.log(arr.filter(fn)); // [12, 7, 8]
17.把數組轉換成字符串,每一項用,分割:toString()
var arr = [1,2,3,4,5] console.log(arr.toString()); // 1,2,3,4,5
18.every和some
every 是所有函數的每個回調都返回 true 的時候才會返回 true,當遇到 false 的時候終止執行,返回 false。
some 函數是存在有一個函數返回 true 的時候終止執行並返回 true,否則返回 false。
// every var arr = [1,6,8,-2,-5,7,-4] var isPositive = arr.every(function(value){ return value > 0; }) console.log(isPositive) // false //some var arr = [1,6,8,-2,-5,7,-4] var isPositive = arr.some(function(value){ return value > 0; }) console.log(isPositive) // true
19.reduce(function(v1,v2),value) 和 reduceRight(functio(v1,v2),value)
遍歷數組,調用回調函數,將數組元素組合成一個值,reduce 從索引最小值開始,reduceRight 反向,方法有兩個參數(回調函數,把兩個值合成一個,返回結果;value,一個初始值,可選)
var arr = [1,2,3,4,5,6] console.log(arr.reduce(function(v1,v2){ return v1 + v2; })) // 21 //開始是1+2 = 3,之后3+3 =6,之后6+4 =10,之后 //10+5 =15,最后15+6 =21 console.log(arr.reduce(function(v1,v2){ return v1 - v2; },100)) // 79 //開始的時候100-1=99,之后99-2=97,之后97-3=94,之后 //94-4=90,之后90-5=85,最后85-6=79
20.判斷一個對象是否為數組:isArray()
var arr = [3,4,5] console.log(Array.isArray(arr)); // true
Math
Math本身就是一個對象, 不需要在通過構造函數去創建, 該對象中集合了很多關於數學運算的方法
Math.abs() 獲取一個對象的絕對值
Math.round() 四舍五入
Math.PI π
Math.max() 求幾個數的最大數
Math.min() 求幾個數的最小數
Math.ceil() 向上取整
Math.floor() 向下取整
Math.random() 隨機數 (隨機生成0 ~1之間的數)
JS選取DOM元素的方法
注意:原生JS選取DOM元素比使用jQuery類庫選取要快很多
1、通過ID選取元素
document.getElementById('myid');
2、通過CLASS選取元素
document.getElementsByClassName('myclass')[0];
3、通過標簽選取元素
document.getElementsByTagName('mydiv')[0];
4、通過NAME屬性選取元素(常用於表單)
document.getElementsByName('myname')[0];
JS修改CSS樣式
document.getElementById('myid').style.display = 'none';
JS修改CLASS屬性
document.getElementById('myid').className = 'active';
如果有多個CLASS屬性,即用空格隔開
document.getElementById('myid').className = 'active div-1';
移除該元素上的所有CLASS
document.getElementById('myid').className = '';
注意:使用classList會優於使用className
document.getElementById('myid').classList.item(0); //item為類名的索引
document.getElementById('myid').classList.length; //只讀屬性
document.getElementById('myid').classList.add('newClass'); //添加class
document.getElementById('myid').classList.remove('newClass'); //移除class
document.getElementById('myid').classList.toggle('newClass'); //切換,有則移除,沒有則添加
document.getElementById('myid').classList.contains('newClass'); //判斷是否存在該class
補充:add和remove方法不允許鏈式操作,因為返回的都是undefined,其次,也不允許同時添加或刪除多個class,可以自行擴展一下
JS修改文本
document.getElementById('myid').innerHTML = '123';
JS創建元素並向其中追加文本
var newdiv = document.createElement('div'); var newtext = document.createTextNode('123'); newdiv.appendChild(newtext); document.body.appendChild(newdiv);
同理:removeChild()移除節點,並返回節點
cloneNode() 復制節點
insertBefore() 插入節點(父節點內容的最前面)
注意:insertBefore() 有兩個參數,第一個是插入的節點,第二個是插入的位置
追加元素的幾種方法:
1.在父級最前面追加一個子元素:prepend()
$('#page ul').prepend('<li id="prevPage">上一頁</li>');
2.在父級最后面追加一個子元素:append()
$('#page ul').append('<li id="nextPage">下一頁</li>');
3.將子元素追加到父級的最前面:prependTo()
$("<li id="prevPage">上一頁</li>").prependTo($("#page ul"));
4.將子元素追加到父級的最后:appendTo()
$("<li id="nextPage">下一頁</li>").appendTo($("#page ul"));
5.在當前元素之前追加(是同級關系):before()
$("#wrap").before("<p class='siblings'>我是同級元素before</p>");
6.在當前元素之后追加(是同級關系):after()
$("#wrap").after("<p class='siblings'>我是同級元素after</p>");
7.將元素追加到指定對象的前面(是同級關系):insertBefore()
$("<p class='three'>我是同級元素insertBefore</p>").insertBefore($("#wrap"));
8.將元素追加到指定對象的后面(是同級關系):insertAfter()
$("<p class='three'>我是同級元素insertAfter</p>").insertAfter($("#wrap"));
9.在節點的最后追加子元素:appendChild()
// 創建script標簽 var script = document.createElement('script'); // 設置src屬性 script.src = 'http://localhost:3001/better?callback=fn2'; // 將script標簽追加到頁面中 document.body.appendChild(script); // 或者 // 創建p節點 var para = document.createElement("p"); // 創建文本節點 var node = document.createTextNode("我是子集appendChild新段落。"); // 把文本節點添加到p節點里 para.appendChild(node); // 查找div var element = document.getElementById("wrap"); // 把p節點添加到div1里 element.appendChild(para);
JS返回所有子節點對象 childNodes
firstChild 返回第一個子節點
lastChild 返回最后一個子節點
parentNode 返回父節點對象
nextSibling 返回下一個兄弟節點對象
previousSibling 返回前一個兄弟節點對象
nodeName 返回節點的HTML標記名稱
var mylist = document.getElementById('myid'); for(var i=0,i<mylist.childNodes.length;i++){ console.log(mylist.childNodes[i]); }
常用的封裝好的方法:
1、n-m之間的隨機數
function numRandom(n, m) { if (n > m) { return parseInt(m + Math.random() * (n - m + 1)); } else { return parseInt(n + Math.random() * (m - n + 1)); } }
2、時間過濾器 yyyy-mm-dd hh:mm:ss
filters = (data) =>{ var time = new Date(data); var timeStr = time.getFullYear()+"-"+ (time.getMonth()+1).toString().padStart(2,"0")+"-"+ time.getDate().toString().padStart(2,"0")+ " "+ time.getHours().toString().padStart(2,"0")+":"+ time.getMinutes().toString().padStart(2,"0")+":"+ time.getSeconds().toString().padStart(2,"0"); return timeStr; } function formatDate(date) { var year = date.getFullYear(); var month = date.getMonth() + 1; var day = date.getDate(); var hour = date.getHours(); var minute = date.getMinutes(); var second = date.getSeconds(); // return year+"-"+month+"-"+date+" "+hour+":"+minute+":"+second; return year + '-' + (String(month).length > 1 ? month : '0' + month) + '-' + (String(day).length > 1 ? day : '0' + day) + ' ' + (String(hour).length > 1 ? hour : '0' + hour) + ':' + (String(minute).length > 1 ? minute : '0' + minute) + ':' + (String(second).length > 1 ? second : '0' + second) } //如果記得時間戳是毫秒級的就需要*1000 不然就錯了記得轉換成整型 var d = new Date(); //Tue Mar 26 2019 05:00:00 GMT+0800 (中國標准時間) console.log(formatDate(d)) //2019-03-26 05:00:00
3、返回頂部通用方法
function backTop(btnId) { var btn = document.getElementById(btnId); var d = document.documentElement; var b = document.body; window.onscroll = set; btn.style.display = "none"; btn.onclick = function () { btn.style.display = "none"; window.onscroll = null; this.timer = setInterval(function () { d.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1); b.scrollTop -= Math.ceil((d.scrollTop + b.scrollTop) * 0.1); if (d.scrollTop + b.scrollTop == 0) clearInterval(btn.timer, (window.onscroll = set)); }, 10); }; function set() { btn.style.display = d.scrollTop + b.scrollTop > 100 ? "block" : "none"; } } backTop("goTop");
對象Object構造方法
Object.assign()將所有可枚舉的自身屬性的值從一個或多個源對象復制到目標對象。
Object.create()用指定的原型對象和屬性創建一個新對象。
Object.defineProperty()將給定描述符描述的命名屬性添加到對象。
Object.defineProperties()將給定描述符描述的命名屬性添加到對象。
Object.entries()返回一個包含[key, value]給定對象自己的可枚舉字符串屬性的所有對的數組。
Object.freeze()凍結對象。其他代碼無法刪除或更改其屬性。
Object.fromEntries()從可迭代的[key, value]對中返回一個新對象。(這是的反向 Object.entries)。
Object.getOwnPropertyDescriptor()返回對象的命名屬性的屬性描述符。
Object.getOwnPropertyDescriptors()返回一個包含對象自身所有屬性描述符的對象。
Object.getOwnPropertyNames()返回一個數組,其中包含給定對象自己的所有可枚舉和不可枚舉屬性的名稱。
Object.getOwnPropertySymbols()返回直接在給定對象上找到的所有符號屬性的數組。
Object.getPrototypeOf()返回prototype指定對象的。
Object.is()比較兩個值是否相同。求所有NaN值(不同於“抽象相等比較”和“嚴格相等比較”)。
Object.isExtensible()確定是否允許擴展對象。
Object.isFrozen()確定對象是否凍結。
Object.isSealed()確定對象是否密封。
Object.keys()返回一個數組,其中包含給定對象自己的所有可枚舉字符串屬性的名稱。
Object.preventExtensions()防止對象的任何擴展。
Object.seal()防止其他代碼刪除對象的屬性。
Object.setPrototypeOf()設置對象的原型(其內部[[Prototype]]屬性)。
Object.values()返回一個數組,該數組包含與給定對象自己的所有可枚舉字符串屬性相對應的值。
更改數組對象中屬性的參數名:
let data1 = [ { appName: "應用1", capacity: 233456 }, { title: "應用2", key: 124535 } ]; let data2 = []; data1.forEach(item => { data2.push({ name: item.appName || item.title, value: item.capacity || item.key }); }); console.log(data2)
