欧美成人精品手机在线观看_69视频国产_动漫精品第一页_日韩中文字幕网 - 日本欧美一区二区

LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

30 個 Javascript 知識點總結,總有你不會的!

admin
2024年10月12日 21:18 本文熱度 573

作者:_小九

https://juejin.cn/post/7145036326373425159

最近重溫了一遍紅寶書,發現一些比較好玩的寫法,很多東西日常都在用,但是發現還會有不一樣的寫法,結合一些日常工作中使用的方法,為大家總結一篇日常經常使用可能還不知道的點,希望對你能有所幫助:

一行代碼完成結構加賦值

我們日常經常使用結構賦值,一般都是先結構,再賦值,當然我們也可以一行就完成解構加賦值操作,看起來非常簡化,當然可讀性你懂得!

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(!numberreturn
  if(number === 10return 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
}

/* 5.ES6提供了Number.isInteger */
復制代碼

通過css檢測系統的主題色從而全局修改樣式

@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
}
復制代碼

隨機獲取一個Boolean值

和上個原理相同,通過隨機數獲取,**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());
}
復制代碼

利用set數組去重

function uniqueArr(arr){
    return [...new Set(arr)]
}
復制代碼

dom節點平滑滾動到可是區域,頂部,底部

原生的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轉換

一些場景下我們會將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節點是否覆蓋重疊

有些場景下我們需要判斷dom是否發生碰撞了或者重疊了,我們可以通過getBoundingClientRect獲取到dom的x1,y1,x2,y2坐標然后進行坐標比對即可判斷出來


function overlaps = (ab) {
   return (a.x1 < b.x2 && b.x1 < a.x2) || (a.y1 < b.y2 && b.y1 < a.y2);
}
復制代碼

判斷是否是NodeJs環境

前端的日常開發是離不開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);
}
復制代碼

該文章在 2024/10/14 12:32:47 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved