avaScript可以實現(xiàn)很多令人驚奇的事!
從復雜的框架到處理API,有太多的東西可以學習。
甚至,僅用一行代碼,它也能完成一些很棒的工作。
不信?那么請看這13條JavaScript單行代碼,用上它們,會讓你看起來特別專業(yè)!
使用Math.random()方法可以讓函數(shù)返回布爾值(true或false)。Math.random會創(chuàng)建一個介于0和1之間的隨機數(shù),然后我們檢查這個數(shù)是大于還是小于0.5。也就是說,有50%/50%的幾率得到true或false。
以下JS代碼塊顯示了如何使用Math.Random方法獲取隨機布爾值。
const randomBoolean = () => Math.random() >= 0.5;
console.log(randomBoolean());
// Result: a 50/50 change on returning true of false
我們可以通過此方法來檢查函數(shù)中提供的日期是工作日還是周末。
以下JS代碼塊顯示了如何編寫一個返回指定日期是工作日還是周末的函數(shù)。
const isWeekday = (date) => date.getDay() % 6 !== 0;
console.log(isWeekday(new Date(2021, 0, 11)));
// Result: true (Monday)
console.log(isWeekday(new Date(2021, 0, 10)));
// Result: false (Sunday)
有兩種不同的方式可以反轉字符串。使用split(),reverse()和join()方法是最簡單的方法之一。
以下JS代碼塊顯示了如何反轉字符串。
const reverse = str => str.split('').reverse().join('');
reverse('hello world');
// Result: 'dlrow olleh'
我們可以使用document.hidden屬性來檢查當前tab是否在視圖/焦點中。
以下JS代碼塊顯示了如何使用文檔的hidden屬性來獲取當前tab是否在視圖/焦點中。
const isBrowserTabInView = () => document.hidden;
isBrowserTabInView();
// Result: returns true or false depending on if tab is in view / focus
可以通過使用取模運算符(%)來解決這個超簡單的任務。如果你對此還不太熟悉,那么Stack Overflow上就有直觀的說明。
以下JS代碼塊顯示了如何使用模運算符來檢查數(shù)字是偶數(shù)還是奇數(shù)。
const isEven = num => num % 2 === 0;
console.log(isEven(2));
// Result: true
console.log(isEven(3));
// Result: false
通過使用.toTimeString()方法并在合適的位置切割字符串,我們就可以從指定的日期中獲取時間,也可以獲取當前時間。
以下JS代碼塊顯示了如何通過toTimeString方法和切割字符串從日期中獲取時間。
const timeFromDate = date => date.toTimeString().slice(0, 8);
console.log(timeFromDate(new Date(2021, 0, 10, 17, 30, 0)));
// Result: "17:30:00"
console.log(timeFromDate(new Date()));
// Result: will log the current time
使用Math.pow()方法,可以截取數(shù)字小數(shù)點后的固定幾位。
以下JS代碼塊顯示了如何使用Math.Power方法舍入某個小數(shù)點。
const toFixed = (n, fixed) => ~~(Math.pow(10, fixed) * n) / Math.pow(10, fixed);
// Examples
toFixed(25.198726354, 1); // 25.1
toFixed(25.198726354, 2); // 25.19
toFixed(25.198726354, 3); // 25.198
toFixed(25.198726354, 4); // 25.1987
toFixed(25.198726354, 5); // 25.19872
toFixed(25.198726354, 6); // 25.198726
我們可以使用document.activeElement屬性來檢查一個元素當前是否處于焦點。
以下JS代碼塊顯示了如何使用文檔對象上的activeElement屬性檢查元素當前是否處于焦點。
const elementIsInFocus = (el) => (el === document.activeElement);
elementIsInFocus(anyElement)
// Result: will return true if in focus, false if not in focus
以下JS代碼塊顯示了如何檢查當前用戶是否支持touch事件。
const touchSupported = () => {
('ontouchstart' in window || window.DocumentTouch && document instanceof window.DocumentTouch);
}
console.log(touchSupported());
// Result: will return true if touch events are supported, false if not
可以使用navigator.platform來檢查當前用戶是否使用Apple設備。
以下JS代碼塊顯示了如何檢查用戶當前是否在Apple設備上。
const isAppleDevice = /Mac|iPod|iPhone|iPad/.test(navigator.platform);
console.log(isAppleDevice);
// Result: will return true if user is on an Apple device
window.scrollTo()方法通過x坐標和y坐標實現(xiàn)滾動。如果將它們設置為0,則將滾動到頁面頂部。
注意:Internet Explorer不支持.scrollTo()方法。
以下JS代碼塊顯示了如何使用scrollTo方法將瀏覽器滾動至頂部。
const goToTop = () => window.scrollTo(0, 0);
goToTop();
// Result: will scroll the browser to the top of the page
可以使用reduce方法獲取函數(shù)參數(shù)的平均值。
以下JS代碼塊顯示了如何使用reduce方法獲取參數(shù)的平均值。
const average = (...args) => args.reduce((a, b) => a + b) / args.length;
average(1, 2, 3, 4);
// Result: 2.5
最后一個2合1了!
處理溫度有時會暈頭轉向。這兩個函數(shù)則能幫助大家將華氏溫度轉換為攝氏溫度,以及將攝氏溫度轉換為華氏溫度。
以下JS代碼塊顯示了如何將華氏溫度轉換為攝氏溫度,以及反向的轉換。
const celsiusToFahrenheit = (celsius) => celsius * 9/5 + 32;
const fahrenheitToCelsius = (fahrenheit) => (fahrenheit - 32) * 5/9;
// Examples
celsiusToFahrenheit(15); // 59
celsiusToFahrenheit(0); // 32
celsiusToFahrenheit(-20); // -4
fahrenheitToCelsius(59); // 15
fahrenheitToCelsius(32); // 0
喜歡本文,請關注,點贊,收藏哦。
大的激光脈沖聚焦到一個小型晶體中,產生了糾纏光子對。隨后,糾纏光子對被發(fā)送到遠程站點。在遠程站點對它們的測量,會產生隨機比特。
phys.org網站當?shù)貢r間3月9日報道,美國科羅拉多大學(CU)/美國國家標準技術研究所(NIST)和日本電信電話株式會社(NTT)的研究人員開發(fā)了一種隨機數(shù)生成協(xié)議。該協(xié)議適配多種量子系統(tǒng),為開發(fā)更安全、更高效的隨機數(shù)生成器奠定了基礎。
研究人員Lynden Krister Shalm說:“我們一直希望了解如何應用量子糾纏效應構建全新的隨機數(shù)生成器。”
此前,Shalm等人曾嘗試利用量子糾纏的非局域特性,以獨立于設備的方式生成隨機比特。系統(tǒng)的安全性主要取決于這樣一個事實:黑客發(fā)送信息的速度無法超越光速。
Shalm說:“我們設計的系統(tǒng)與依賴物理過程(如放射性衰變)或數(shù)學算法的常規(guī)隨機數(shù)生成器有顯著區(qū)別。”
基于物理過程或數(shù)學算法的隨機數(shù)生成器需要滿足大量額外假設條件。為了使用量子糾纏產生高度安全的隨機比特,新系統(tǒng)必須消耗大量隨機性,而這將大大降低系統(tǒng)效率。
“在2017年初訪問CU/NIST時,我很興奮地得知,Shalm團隊已經有能力完成設備無關的隨機數(shù)生成。”研究人員Yanbao Zhang說,“但這樣的實驗消耗了太多隨機比特,卻只能產生少量高質量的認證隨機比特。因此,我們希望推動設備無關的隨機擴展,從而產生更多的認證輸出比特。”
為此,Zhang和Shalm等人設計了一種方法,利用少量“種子隨機性”來產生更多量子認證隨機比特。這是新系統(tǒng)與其他隨機數(shù)生成器的顯著區(qū)別之一。
Shalm說:“這與用種子晶體培育大型結構的方式很相似。借助新系統(tǒng),我們能夠輸出比輸入多24%的隨機比特。”
原則上講,新系統(tǒng)能夠以無限擴展輸入種子隨機性的方式運行。由于技術要求非常苛刻,為了實現(xiàn)隨機性擴展,研究人員不得不將實驗系統(tǒng)推向了當前的極限。
為了將隨機輸入的種子擴展成與設備無關的隨機比特,研究人員必須對種子比特進行巧妙應用。系統(tǒng)通過特殊的“無漏洞貝爾測試”實現(xiàn)了這個目標。
Shalm說:“與其對所有糾纏光子進行這種會消耗隨機性的測試,我們不如以隨機方式‘抽查’部分光子,以確保系統(tǒng)表現(xiàn)符合預期。這與食品行業(yè)的隨機樣本檢測很類似。值得注意的是,我們必須非常謹慎,以確保抽查過程不存在漏洞。”
Zhang補充:“以2000個番茄的品質檢測為例,常規(guī)協(xié)議需要消耗2000個有偏隨機比特,而新協(xié)議只消耗1000個均勻隨機比特。在實踐中,均勻隨機比特比有偏隨機比特更易于從NIST隨機信標中獲得。因此,抽查方案更加友好。”
新成果還可能促進科學家對量子力學隨機性的理解。Shalm說:“從更實際的角度來看,我們的實驗屬于原始量子網絡的實例。其中,糾纏粒子是在嚴格條件下交換和操作的,以完成其他經典(包括局域量子)系統(tǒng)無法完成的任務。新系統(tǒng)可以為各種需要使用隨機樣本資源的應用服務,如挑選陪審員、協(xié)助隨機審計選舉系統(tǒng)甚至助力更公平的國會選區(qū)劃定。有了新系統(tǒng)后,主導選區(qū)劃分的將成為量子力學,而不是政客。現(xiàn)在,我們正在努力讓新系統(tǒng)具備成熟的服務能力。”
編譯:雷鑫宇 審稿:西莫 責編:陳之涵
期刊來源:《自然?物理學》
期刊編號:1745-2473
原文鏈接:https://phys.org/news/2021-03-device-independent-protocol-efficient-random.html
中文內容僅供參考,一切內容以英文原版為準。轉載請注明來源。
該方法用于檢測給出的日期是否有效:
const isDateValid=(...val)=> !Number.isNaN(new Date(...val).valueOf());
isDateValid("December 17, 1995 03:24:00"); // true
復制代碼
該方法用于計算兩個日期之間的間隔時間:
const dayDif=(date1, date2)=> Math.ceil(Math.abs(date1.getTime() - date2.getTime()) / 86400000)
dayDif(new Date("2021-11-3"), new Date("2022-2-1")) // 90
復制代碼
距離過年還有90天~
該方法用于檢測給出的日期位于今年的第幾天:
const dayOfYear=(date)=> Math.floor((date - new Date(date.getFullYear(), 0, 0)) / 1000 / 60 / 60 / 24);
dayOfYear(new Date()); // 307
復制代碼
2021年已經過去300多天了~
該方法可以用于將時間轉化為hour:minutes:seconds的格式:
const timeFromDate=date=> date.toTimeString().slice(0, 8);
timeFromDate(new Date(2021, 11, 2, 12, 30, 0)); // 12:30:00
timeFromDate(new Date()); // 返回當前時間 09:00:00
復制代碼
該方法用于將英文字符串的首字母大寫處理:
const capitalize=str=> str.charAt(0).toUpperCase() + str.slice(1)
capitalize("hello world") // Hello world
復制代碼
該方法用于將一個字符串進行翻轉操作,返回翻轉后的字符串:
const reverse=str=> str.split('').reverse().join('');
reverse('hello world'); // 'dlrow olleh'
復制代碼
該方法用于生成一個隨機的字符串:
const randomString=()=> Math.random().toString(36).slice(2);
randomString();
復制代碼
該方法可以從指定長度處截斷字符串:
const truncateString=(string, length)=> string.length < length ? string : `${string.slice(0, length - 3)}...`;
truncateString('Hi, I should be truncated because I am too loooong!', 36) // 'Hi, I should be truncated because...'
復制代碼
該方法用于去除字符串中的HTML元素:
const stripHtml=html=> (new DOMParser().parseFromString(html, 'text/html')).body.textContent || '';
復制代碼
該方法用于移除數(shù)組中的重復項:
const removeDuplicates=(arr)=> [...new Set(arr)];
console.log(removeDuplicates([1, 2, 2, 3, 3, 4, 4, 5, 5, 6]));
復制代碼
該方法用于判斷一個數(shù)組是否為空數(shù)組,它將返回一個布爾值:
const isNotEmpty=arr=> Array.isArray(arr) && arr.length > 0;
isNotEmpty([1, 2, 3]); // true
復制代碼
可以使用下面兩個方法來合并兩個數(shù)組:
const merge=(a, b)=> a.concat(b);
const merge=(a, b)=> [...a, ...b];
復制代碼
該方法用于判斷一個數(shù)字是奇數(shù)還是偶數(shù):
const isEven=num=> num % 2===0;
isEven(996);
復制代碼
const average=(...args)=> args.reduce((a, b)=> a + b) / args.length;
average(1, 2, 3, 4, 5); // 3
復制代碼
該方法用于獲取兩個整數(shù)之間的隨機整數(shù)
const random=(min, max)=> Math.floor(Math.random() * (max - min + 1) + min);
random(1, 50);
復制代碼
該方法用于將一個數(shù)字按照指定位進行四舍五入:
const round=(n, d)=> Number(Math.round(n + "e" + d) + "e-" + d)
round(1.005, 2) //1.01
round(1.555, 2) //1.56
復制代碼
該方法可以將一個RGB的顏色值轉化為16進制值:
const rgbToHex=(r, g, b)=> "#" + ((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1);
rgbToHex(255, 255, 255); // '#ffffff'
復制代碼
該方法用于獲取一個隨機的十六進制顏色值:
const randomHex=()=> `#${Math.floor(Math.random() * 0xffffff).toString(16).padEnd(6, "0")}`;
randomHex();
復制代碼
該方法使用 navigator.clipboard.writeText 來實現(xiàn)將文本復制到剪貼板:
const copyToClipboard=(text)=> navigator.clipboard.writeText(text);
copyToClipboard("Hello World");
復制代碼
該方法可以通過使用 document.cookie 來訪問 cookie 并清除存儲在網頁中的所有 cookie:
const clearCookies=document.cookie.split(';').forEach(cookie=> document.cookie=cookie.replace(/^ +/, '').replace(/=.*/, `=;expires=${new Date(0).toUTCString()};path=/`));
復制代碼
該方法通過內置的 getSelection 屬性獲取用戶選擇的文本:
const getSelectedText=()=> window.getSelection().toString();
getSelectedText();
復制代碼
該方法用于檢測當前的環(huán)境是否是黑暗模式,它是一個布爾值:
const isDarkMode=window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches
console.log(isDarkMode)
復制代碼
該方法用于在頁面中返回頂部:
const goToTop=()=> window.scrollTo(0, 0);
goToTop();
復制代碼
該方法用于檢測當前標簽頁是否已經激活:
const isTabInView=()=> !document.hidden;
復制代碼
該方法用于檢測當前的設備是否是蘋果的設備:
const isAppleDevice=()=> /Mac|iPod|iPhone|iPad/.test(navigator.platform);
isAppleDevice();
復制代碼
該方法用于判斷頁面是否已經底部:
const scrolledToBottom=()=> document.documentElement.clientHeight + window.scrollY >=document.documentElement.scrollHeight;
復制代碼
該方法用于重定向到一個新的URL:
const redirect=url=> location.href=url
redirect("https://www.google.com/")
復制代碼
該方法用于打開瀏覽器的打印框:
const showPrintDialog=()=> window.print()
復制代碼
該方法可以返回一個隨機的布爾值,使用Math.random()可以獲得0-1的隨機數(shù),與0.5進行比較,就有一半的概率獲得真值或者假值。
const randomBoolean=()=> Math.random() >=0.5;
randomBoolean();
復制代碼
可以使用以下形式在不適用第三個變量的情況下,交換兩個變量的值:
[foo, bar]=[bar, foo];
復制代碼
該方法用于獲取一個變量的類型:
const trueTypeOf=(obj)=> Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
trueTypeOf(''); // string
trueTypeOf(0); // number
trueTypeOf(); // undefined
trueTypeOf(null); // null
trueTypeOf({}); // object
trueTypeOf([]); // array
trueTypeOf(0); // number
trueTypeOf(()=> {}); // function
復制代碼
該方法用于攝氏度和華氏度之間的轉化:
const celsiusToFahrenheit=(celsius)=> celsius * 9/5 + 32;
const fahrenheitToCelsius=(fahrenheit)=> (fahrenheit - 32) * 5/9;
celsiusToFahrenheit(15); // 59
celsiusToFahrenheit(0); // 32
celsiusToFahrenheit(-20); // -4
fahrenheitToCelsius(59); // 15
fahrenheitToCelsius(32); // 0
復制代碼
該方法用于檢測一個JavaScript對象是否為空:
const isEmpty=obj=> Reflect.ownKeys(obj).length===0 && obj.constructor===Object;
*請認真填寫需求信息,我們會在24小時內與您取得聯(lián)系。