除數取整:
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)