如何在iPhone上啟用CarPlay菜單
我搞不清楚如何在我的收音機上啟用CarPlay功能。 我可以看到收音機上的圖標,但它是禁用的,無法點擊。 我查看了一些指示,上面說“前往設置->常規->CarPlay”進行設置,但我沒有這個菜單。 後來發現,問題是我沒有使用Siri。 啟用Siri後,CarPlay菜單出現在“設置->常規”下: 然後我成功連接了: 這樣我就可以聽我的最愛播客了: 而且這裡是CarPlay正常運行(遊刃有余)的樣子(雙關語):
我搞不清楚如何在我的收音機上啟用CarPlay功能。 我可以看到收音機上的圖標,但它是禁用的,無法點擊。 我查看了一些指示,上面說“前往設置->常規->CarPlay”進行設置,但我沒有這個菜單。 後來發現,問題是我沒有使用Siri。 啟用Siri後,CarPlay菜單出現在“設置->常規”下: 然後我成功連接了: 這樣我就可以聽我的最愛播客了: 而且這裡是CarPlay正常運行(遊刃有余)的樣子(雙關語):
在JavaScript中,如何交換數組中的2個元素? 假設我們有一個包含5個字母的數組a。 const a = ['a', 'b', 'c', 'e', 'd'] 我們想要將索引為4的元素(在這個例子中是’d’)和索引為3的元素(在這個例子中是’e’)進行交換。 我們可以使用一個暫存變量tmp來存儲索引為4的元素的值,然後將索引為3的元素放到索引為4的位置,最後將暫存變量賦值給索引為3的位置: const tmp = a[4] a[4] = a[3] a[3] = tmp 另一種方法,不需要聲明一個暫存變量,可以使用以下語法: const a = ['a', 'b', 'c', 'e', 'd']; [a[3], a[4]] = [a[4], a[3]] 現在數組a的順序將會按我們的要求進行正確排序。 a //[ 'a', 'b', 'c', 'd', 'e' ]
了解如何將兩個JavaScript物件合併並創建一個結合屬性的新物件。 2015年的ES6引入了展開運算符,這是將兩個簡單物件合併為一個的完美方式: const object1 = { name: 'Flavio' } const object2 = { age: 35 } const object3 = {...object1, ...object2 } 如果兩個物件都具有相同名稱的屬性,則第二個物件的屬性將覆蓋第一個。 在這種情況下,最好的解決方案是使用Lodash和其merge()方法,該方法將執行深層合併,遞歸合併物件屬性和數組。 在Lodash文檔中查看它的文檔。
了解如何使用JavaScript合併兩個或多個數組 假設你有兩個數組: const first = ['one', 'two'] const second = ['three', 'four'] 你想將它們合併為一個單一的數組,該怎麼辦? 現代方法是使用解構運算符來創建一個全新的數組: const result = [...first, ...second] 這是我推薦的方法。請注意,這個運算符在ES6中引入,所以舊版本的瀏覽器(比如:Internet Explorer)可能不支持它。 如果你需要在舊版本的瀏覽器中也能運行的解決方案,你可以使用concat()方法,該方法可以在任何數組上調用: const result = first.concat(second) 這兩種方法都會生成一個新的數組,而不會修改現有的數組。
如何从字符串中删除最后一个字符呢? 最简单的解决方案是使用字符串的 slice() 方法,传递两个参数。第一个参数是0,表示起点位置。第二个参数是要删除的字符数量。传递一个负数将从末尾开始删除。这是解决方案: const text = 'abcdef' const editedText = text.slice(0, -1) //'abcde' 请注意,slice() 方法不会修改原始字符串。 它会创建一个新的字符串,所以在上面的示例中,我将其赋值给一个新的变量。
JavaScript有一些內建的類型,包括數字、字符串、布爾值和對象。 使用typeof運算符,我們可以檢查變量賦值的值的類型。 例如: typeof 'test' 注意它不是一個函數,而是一個運算符,所以不需要使用括號。 使用它,我們將得到一個字符串,返回以下值之一: 'number' 'string' 'boolean' 'undefined' 'bigint' 'symbol' 'object' 'function' 請注意,沒有null類型,而且 typeof null 將返回'object'。 數組也會返回'object': typeof [1, 2, 3] //'object' 函數是一種特殊類型的對象,因為我們可以向函數添加屬性和方法: const talk = () => {} talk.test = true 但如果我們使用typeof運算符,它們將返回自己的值'function'。
假設您有一個字符串,並且想要刪除其中的第一個字符,該怎麼做呢? 一種簡單的方法是使用slice()方法,並將1作為參數傳遞: const text = 'abcdef' const editedText = text.slice(1) //'bcdef' 請注意,slice()方法不會修改原始字符串。它會創建一個新的字符串,這就是為什麼在上面的示例中我將其賦值給一個新變量的原因。
Promise是JavaScript中处理异步代码的一种方式,不需要在代码中编写过多的回调函数。 引言 Promise的工作原理简述 [哪些JS API使用Promise?](#哪些JS API使用Promise?) 创建Promise 消费Promise 链接Promise 链接Promise的实例 处理错误 级联错误 编排Promise Promise.all() Promise.race() 常见错误 [未捕获 TypeError: undefined 不是一个Promise](#未捕获TypeError: undefined 不是一个Promise) 引言 Promise通常被定义为"最终可用值的代理"。 Promise是处理异步代码的一种方式,不需要在代码中编写过多的回调函数。 尽管Promise已经存在多年,但它们在ES2015进行了标准化和引入,然后在ES2017中被异步函数取代。 异步函数使用Promise API作为基础,因此理解Promise是基本的,即使在较新的代码中,您可能会使用异步函数而不是Promise。 Promise的工作原理简述 一旦调用了Promise,它将以"挂起"状态开始,这意味着调用者函数将继续执行,同时等待Promise执行自己的处理工作,并向调用者函数提供一些反馈。 此时,调用者函数等待它返回一个"已解决"或"已拒绝"状态的Promise,但函数会在Promise执行其工作时继续执行。 哪些JS API使用Promise? 除了您自己的代码和库代码之外,Promise还被现代Web API使用,例如: Battery API Fetch API Service Workers 在现代JavaScript中,您可能不会遇到不使用Promise的情况,因此让我们直接深入了解它们。 创建Promise Promise API公开了一个Promise构造函数,您可以使用new Promise()进行初始化: let done = true const isItDoneYet = new Promise((resolve, reject) => { if (done) { const workDone = 'Here is the thing I built' resolve(workDone) } else { const why = 'Still working on something else' reject(why) } }) 如您所见,Promise检查全局变量done,如果为true,则返回一个已解决的Promise,否则返回一个被拒绝的Promise。...
找出如何返回異步函數(使用Promise或回調函數)的結果,使用JavaScript。 假設你遇到了這個問題:你需要進行一個異步調用,並且需要將該調用的結果從原始函數中返回。 像這樣: const mainFunction = () => { const result = asynchronousFunction() return result } 但是asynchronousFunction()在內部執行了一些異步調用(例如fetch()調用),並且無法直接返回結果。該函數可能內部有一個需要等待的Promise,或者使用了回調函數。像這樣: const asynchronousFunction = () => { return fetch('./file.json').then(response => { return response }) } 那麼該怎麼辦呢? 使用async/await是最直接的解決方案。您可以使用await關鍵字代替基於Promise的方法,像我們之前使用的方法一樣: const asynchronousFunction = async () => { const response = await fetch('./file.json') return response } 在這種情況下,在mainFunction中,我們需要在函數簽名前加上async,並在調用asynchronousFunction()之前加上await: const mainFunction = async () => { const result = await asynchronousFunction() return result } 現在,因為它是一個async函數,它會返回一個Promise: mainFunction() // 返回一個Promise 為了獲取結果,您可以將其封裝在IIFE中,就像這樣: (async () => { console....
實用指南:如何在JavaScript中扁平化數組 ES2019在Array原型中引入了兩個新方法:flat和flatMap。它們對於我們想要的操作——將數組扁平化非常有用。 讓我們看看它們是如何工作的。 但首先,提醒一下:只有Firefox 62+、Chrome 69+、Edge 76+和Safari 12+已經支持這兩個方法,因為它們是比較新的。請查看當前瀏覽器支持情況,並記住,如果你需要支持較舊的瀏覽器,可以使用Babel將你的代碼回退到之前的ES版本。 如果你不想使用Babel,而且你還沒有構建步驟,你可以使用Lodash提供的flatten()、flattenDeep()和flattenDepth()函數,這可能更有意義。 Lodash的一個很酷的功能是你無需導入整個庫,你可以使用這些包來單獨使用這些函數: lodash.flatten lodash.flattendeep lodash.flattendepth 下面是使用lodash.flatten扁平化數組的方法: const flatten = require('lodash.flatten') const animals = ['Dog', ['Sheep', 'Wolf']] flatten(animals) //['Dog', 'Sheep', 'Wolf'] 現在讓我們來討論原生的flat()和flatMap() JavaScript方法。 flat()是一個新的數組實例方法,它可以從多維數組中創建一個一維數組。 例如: ['Dog', ['Sheep', 'Wolf']].flat() //[ 'Dog', 'Sheep', 'Wolf' ] 默認情況下,它只能“扁平化”一層。 你可以向flat()添加參數來設置要將數組扁平化到的層級。 將其設置為Infinity可以無限層級扁平化: ['Dog', ['Sheep', ['Wolf']]].flat() //[ 'Dog', 'Sheep', [ 'Wolf' ] ] ['Dog', ['Sheep', ['Wolf']]].flat(2) //[ 'Dog', 'Sheep', 'Wolf' ] ['Dog', ['Sheep', ['Wolf']]].flat(Infinity) //[ 'Dog', 'Sheep', 'Wolf' ] 如果你熟悉JavaScript數組的map()方法,你就知道可以使用它對數組的每個元素執行一個函數。...