停車場的投幣器
小故事(停車場的投幣器)一次有個朋友飛來舊金山,我去機場接。由於早到,我在停車場投幣器裡投了一個小時的錢。結果他也早到了,所以我們回到車上時,投幣器裡還剩半個多小時的時間沒用完。於是我們決定為了不浪費已經投進投幣器裡的錢,我們在停車場裡的車上又待了半個多小時。現實當中也許沒人會真的在停車場等,但據說有個調查顯示,500強CEO裡有85%的人承認他們幹過類似的事情。本人屬於85%這類人。(2010-03-30)問答:網友:這個故事說明什麼,錢一定要用得物有所值嗎?段永平:這個故事說明投幣器裡的錢已經拿不回來了,再搭上時間就愚蠢了。(2010-03-30)
理解 JavaScript 中的執行流程和返回值
return 和 throw 的設計目的是確保在語句執行後有一個可用的值傳遞到呼叫或異常處理上下文中。而 normal, break, continue 的設計重點在於控制程式的執行流程,而不是傳遞資料。因此,只有在使用 return 或 throw 時,才需要關注它們返回的值,其他情況下,返回值通常是 undefined 或 empty
如果一個有效的返回值已經存在,隨後的 empty 返回值不會將其覆蓋。
當整個語句塊沒有任何有效的返回值時(即所有語句的返回都是 empty),最終的返回應預設為 undefined。
eval({ 1; 2; ; // empty x:break x; // empty }
)
上面程式碼列印結果為 2
特殊情況:如果 if 語句是塊中的最後一句,它會返回 undefined 而不是 empty
eval({ 2; if (true); // undefined }
)
上面程式碼列印結果為 undefined
動畫方案
https://xie.infoq.cn/article/713108643a8e2c8622c408cc7
透明影片➕預快取
const loadVideo = async (path) =>{
// 下載blob格式的mp4檔案
// 或者從indexdb中獲取快取的影片檔案
return blob;
}
const blob = await loadVideo(path);
path = URL.createObjectURL(blob);
// 設定影片源
video.src = path;
微信+企微+微信小程式 開發過程中的疑難雜症彙總
https://juejin.cn/post/7294971311607316532#heading-32
引用解析函式 GetValue 的組成與功能
GetValue(ref) 返回的是
base:基值,即引用的物件或者環境。myObject.property,那麼 base 就是 myObject
name:屬性名或變數名,表明引用指向的具體項。myObject.property,那麼 name 就是字串 "property"
strict:是否在嚴格模式下。
JavaScript 中的完成狀態
在JavaScript中,每當執行一個語句或表示式,都會生成一個完成狀態(Completion Specification Type),包括一個型別(type),一個值(value),和一個目標(target)。型別通常是"normal", "return", "throw"等,表明了執行的結果型別。
value 域存放的是執行結果的值,這些值可以是任何JavaScript語言所支援的型別,如原始值、物件或者特殊的空值(Empty),表示沒有具體的返回值。
thisValue:如果引用是一個屬性訪問,thisValue 表示那個物件;如果不是屬性訪問,則此值無關。
JavaScript 賦值鏈中的引用解析與執行順序
var a = {}
a.x = a = {n:2}
表示式中的變數和屬性的解析(確定引用)確實是在實際計算或賦值之前完成的。
引用解析:
在執行 a.x = a = {n:2} 之前,表示式中的 a.x 和 a 的引用已被解析。
此時,a.x 是對原始 a 物件(空物件)的屬性 x 的引用。
執行計算:
表示式從右向左計算,首先 {n:2} 賦值給 a,這改變了 a 的引用至新物件 {n:2}。
然後,a.x = a 執行。由於 a.x 已經解析為初始空物件的屬性,現在這個屬性(x)被設定為新的 a 的值(即新物件 {n:2})。
結果:
console.log(b) // { x: { n: 2 } }
console.log(a) // { n: 2 }
+ 和 - 運算子的型別轉換行為
console.log([] + []); // 輸出 ""
console.log([] - []); // 輸出 0
+運算子既用於數值相加,也用於字串連線
雙點語法
解決 JavaScript 中的一個語法問題:直接在數字字面量後面呼叫方法時,會被解析成浮點數,從而導致語法錯誤
1..toString(); // "1"
-運算子僅用於數值減法操作