文章插图
一、逗号运算符, 是用于分隔表达式并返回链中最后一个表达式的运算符 。
let oo = (1, 2, 3)console.log(oo) // 3
这里有三个主要表达式 1 、 2 和 3 。所有这些表达式均被求值,最后一个赋给 oo 。我们在 for 循环中看到这个:
for(let i = 0, ii = 1; i< 10; i++, ii--) { ... }
当我们要编写短的 lambda 函数时,这会派上用场:const lb = (a, b, arr) => (arr.push(a*b), a*b)
这里有两个语句,第一个将乘法结果推入数组arr,第二个将乘数a和b推入数组 。第二个结果就是返回给调用者的内容 。对于三元运算符,它也很有用,因为与短lambda语法相同,它仅接受表达式而不是语句 。
二、inin 是用于检查对象中属性是否存在的关键字 。我们在 for..in 循环中使用了它,但没有意识到,其实 in 也是一个关键字:)
如果对象上存在属性,则 in 将返回 true ,否则将返回 false 。
const o = { prop: 1}console.log("prop" in o) // true
看,in 可以独立使用,而不是在 for..in 中 。它将检查 "prop" 是否可作为 o 对象中的属性使用 。它返回 true ,因为我们在 o 中定义了 "prop" 属性 。
如果我们检查未定义的属性:
const o = { prop: 1}console.log("prop1" in o) // false
它返回 false ,因为 "prop1" 在 o 中未定义 。三、Array 构造函数你知道我们可以不使用传统方法定义数组吗?
const arr = [1, 2, 3]
怎么样?我们也可以使用 Array :
const arr = new Array(1, 2, 3)
传递给 Array 构造函数的参数的排列将构成其索引的基础 。1 是第一个参数,其索引为 0;2 是第二个参数,其索引为 1;3 是第三个参数,其索引为 2 。
arr[0] // 1arr[1] // 2arr[2] // 3
所以,const arr = new Array(1, 2, 3)
和const arr = [1, 2, 3]
表达的是一个意思 。但使用 new Array() 有一个问题,例如:
var a = new Array(10, 20);a[0] // 返回 10a.length // 返回 2
但:var a = new Array(10);a[0] // 返回 undefineda.length // 返回 10
当你仅给 Array 构造函数一个整数(大于等于 0 的整数,否则将会报错)时,才会发生这种情况 。这是为什么喃?其实,新的 Array 构造函数正在从某些编程语言中提取思想,在这些语言中,你需要为数组指定内存,这样就不会出现 ArrayIndexOutOfBounds 异常 。
int *a = (int *) malloc( 10*sizeof(int) ); // ya ol' cint *a = new int[10]; // c++int[] a = new int[10]; // JAVA
是的,它实际上是在创建一个长度为 10 的数组 。我们在 JavaScript 中没有 sizeof 函数,但是 toString 足以证明这一点 。a.toString() // 返回 ",,,,,,,,," 它相当于 [,,,,,,,,,]a // [empty × 10]
所以,当将一个参数传递给的 new Array,将导致 JS 引擎为传递的参数大小的数组分配空间 。并且这也在 EcmaScript 规范中:
文章插图
看,这不是矛盾的 。规格中都有所有描述 。在得出任何结论之前,我们应该始终先阅读任何语言的规范 。
四、Function 构造函数你是否知道我们可以使用 Function 构造函数定义 Function 。
你不明白吧?让我更清楚 。在 JavaScript 中,我们定义如下函数:
const mul = (a, b) => a * b// 或function mul(a, b) { return a * b}// 或const mul = function(a, b) { return a * b}
推荐阅读
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- linux的TCP连接数量最大不能超过65535个吗,那服务器是如何应对百万千万的并发的?
- 吃薄荷叶有什么坏处,喝薄荷叶有什么好处
- 千种明日叶日文,明日叶的食用禁忌
- 加纳利子的营养功效,鹦鹉吃加纳利子的好处
- 金丝皇菊生长周期,喝金丝皇菊的好处
- 做 PPT 时选择哪种字体比较好?看完这篇文章你就懂了!超干货
- Linux 应急响应入门:入侵排查应该这样做
- 这样讲API网关,你应该能明白了吧
- 便秘吃什么好 六款食疗方有效治疗便秘
- 消化不良吃什么好 首选9款食疗粥