您好,登錄后才能下訂單哦!
這篇文章主要介紹“常用的JavaScript知識點有哪些”,在日常操作中,相信很多人在常用的JavaScript知識點有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”常用的JavaScript知識點有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
我們日常經常使用結構賦值,一般都是先結構,再賦值,當然我們也可以一行就完成解構加賦值操作,看起來非常簡化,當然可讀性你懂得!
let people = { name: null, age: null }; let result = { name: '張三', age: 16 }; ({ name: people.name, age: people.age} = result); console.log(people) // {"name":"張三","age":16}###
日常中我們應該用不到這樣的場景,但是實際上我們也可以對基礎數據類型解構
const {length : a} = '1234'; console.log(a) // 4
實際上我們是可以對數組解構賦值拿到length
屬性的,通過這個特性也可以做更多的事情。
const arr = [1, 2, 3]; const { 0: first, length, [length - 1]: last } = arr; first; // 1 last; // 3 length; // 3
日常可能有的列表我們需要將對應的012345轉為中文的一、二、三、四、五...,在老的項目看到還有通過自己手動定義很多行這樣的寫法,于是寫了一個這樣的方法轉換
export function transfromNumber(number){ const INDEX_MAP = ['零','一'.....] if(!number) return if(number === 10) return INDEX_MAP[number] return [...number.toString()].reduce( (pre, cur) => pre + INDEX_MAP[cur] , '' ) }
/* 1.任何整數都會被1整除,即余數是0。利用這個規則來判斷是否是整數。但是對字符串不準確 */ function isInteger(obj) { return obj%1 === 0 } /* 1. 添加一個是數字的判斷 */ function isInteger(obj) { return typeof obj === 'number' && obj%1 === 0 } /* 2. 使用Math.round、Math.ceil、Math.floor判斷 整數取整后還是等于自己。利用這個特性來判斷是否是整數*/ function isInteger(obj) { return Math.floor(obj) === obj } /* 3. 通過parseInt判斷 某些場景不準確 */ function isInteger(obj) { return parseInt(obj, 10) === obj } /* 4. 通過位運算符*/ function isInteger(obj) { return (obj | 0) === obj }
@media
的屬性prefers-color-scheme
就可以知道當前的系統主題,當然使用前需要查查兼容性
@media (prefers-color-scheme: dark) { //... } @media (prefers-color-scheme: light) { //... }
javascript也可以輕松做到
window.addEventListener('theme-mode', event =>{ if(event.mode == 'dark'){} if(event.mode == 'light'){} }) window.matchMedia('(prefers-color-scheme: dark)') .addEventListener('change', event => { if (event.matches) {} // dark mode })
通過0.5
-Math.random()
得到一個隨機數,再通過兩次sort
排序打亂的更徹底,但是這個方法實際上并不夠隨機,如果是企業級運用,建議使用第二種洗牌算法
shuffle(arr) { return arr.sort(() => 0.5 - Math.random()). sort(() => 0.5 - Math.random()); },
function shuffle(arr) { for (let i = arr.length - 1; i > 0; i--) { const randomIndex = Math.floor(Math.random() * (i + 1)) ;[arr[i], arr[randomIndex]] = [arr[randomIndex], arr[i]] } return arr }
和上個原理相同,通過隨機數獲取,Math.random()
的區間是0-0.99
,用0.5
在中間百分之五十的概率
function randomBool() { return 0.5 - Math.random() }
function (arr){ return arr.push(arr.shift()); }
function(arr){ return arr.unshift(arr.pop()); }
function uniqueArr(arr){ return [...new Set(arr)] }
原生的scrollTo
方法沒有動畫,類似于錨點跳轉,比較生硬,可以通過這個方法會自帶平滑的過度效果
function scrollTo(element) { element.scrollIntoView({ behavior: "smooth", block: "start" }) // 頂部 element.scrollIntoView({ behavior: "smooth", block: "end" }) // 底部 element.scrollIntoView({ behavior: "smooth"}) // 可視區域 }
日常我們經常會需要獲取一個隨機顏色,通過隨機數即可完成
function getRandomColor(){ return `#${Math.floor(Math.random() * 0xffffff) .toString(16)}`; }
通過使用Es6的Reflect
靜態方法判斷他的長度就可以判斷是否是空數組了,也可以通過Object.keys()
來判斷
function isEmpty(obj){ return Reflect.ownKeys(obj).length === 0 && obj.constructor === Object; }
一些場景下我們會將boolean
值定義為場景,但是在js中非空的字符串都會被認為是true
function toBoolean(value, truthyValues = ['true']){ const normalizedValue = String(value).toLowerCase().trim(); return truthyValues.includes(normalizedValue); } toBoolean('TRUE'); // true toBoolean('FALSE'); // false toBoolean('YES', ['yes']); // true
數組克隆的方法其實特別多了,看看有沒有你沒見過的!
const clone = (arr) => arr.slice(0); const clone = (arr) => [...arr]; const clone = (arr) => Array.from(arr); const clone = (arr) => arr.map((x) => x); const clone = (arr) => JSON.parse(JSON.stringify(arr)); const clone = (arr) => arr.concat([]); const clone = (arr) => structuredClone(arr);
通過調用getTime
獲取時間戳比較就可以了
function compare(a, b){ return a.getTime() > b.getTime(); }
function monthDiff(startDate, endDate){ return Math.max(0, (endDate.getFullYear() - startDate.getFullYear()) * 12 - startDate.getMonth() + endDate.getMonth()); }
時間格式化輕松解決,一步獲取到年月日時分秒毫秒,由于toISOString
會丟失時區,導致時間差八小時,所以在格式化之前我們加上八個小時時間即可
function extract(date){ const d = new Date(new Date(date).getTime() + 8*3600*1000); return new Date(d).toISOString().split(/[^0-9]/).slice(0, -1); } console.log(extract(new Date())) // ['2022', '09', '19', '18', '06', '11', '187']
有時候我們的方法需要傳入一個函數回調,但是需要檢測其類型,我們可以通過Object
的原型方法去檢測,當然這個方法可以準確檢測任何類型。
function isFunction(v){ return ['[object Function]', '[object GeneratorFunction]', '[object AsyncFunction]', '[object Promise]'].includes(Object.prototype.toString.call(v)); }
function distance(p1, p2){ return `Math.sqrt(Math.pow(p2.x - p1.x, 2) + Math.pow(p2.y - p1.y, 2)); }
有些場景下我們需要判斷dom是否發生碰撞了或者重疊了,我們可以通過getBoundingClientRect
獲取到dom的x1
,y1
,x2
,y2
坐標然后進行坐標比對即可判斷出來
function overlaps = (a, b) { return (a.x1 < b.x2 && b.x1 < a.x2) || (a.y1 < b.y2 && b.y1 < a.y2); }
前端的日常開發是離不開nodeJs的,通過判斷全局環境來檢測是否是nodeJs環境
function isNode(){ return typeof process !== 'undefined' && process.versions != null && process.versions.node != null; }
之前看到有通過函數柯理化形式來求和的,通過reduce
一行即可
function sum(...args){ args.reduce((a, b) => a + b); }
到此,關于“常用的JavaScript知識點有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。