停车场的投币器/return/throw/动画方案/疑难杂症/GetValue/Empty/引用解析与执行顺序/+ 和 - /双点语法

停车场的投币器

小故事(停车场的投币器)一次有个朋友飞来旧金山,我去机场接。由于早到,我在停车场投币器里投了一个小时的钱。结果他也早到了,所以我们回到车上时,投币器里还剩半个多小时的时间没用完。于是我们决定为了不浪费已经投进投币器里的钱,我们在停车场里的车上又待了半个多小时。现实当中也许没人会真的在停车场等,但据说有个调查显示,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"
-操作符仅用于数值减法操作

posted @ 2024-06-06 19:59  被咯苏州  阅读(2)  评论(0编辑  收藏  举报