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