ssd|大多数JS开发人员不知道的十件事(机翻)( 二 )



就像做.new Array()
4. 使数组充满未定义
您可以用未定义的数组填充数组 , 只需在其中放置逗号即可:

您认为这有多少个项目?肯定是4对吧?逗号之间的每个空格各一个 。 这将使其与您用于 的逗号数相同 。 undefined[undefined undefined undefined undefined


不 , 它实际上是每个逗号一个!?这是三个未定义的哈哈 , 好吧 。
您还可以使用 .奇怪的是 , 如果你给它更多的参数 , 它们会填满数组......undefinednew Array(3)Array

因此 , 第一个参数根据参数的传递方式而有所不同 。 认真地?
5.数组是对象 , 我知道你已经知道这一点 , 但是...
..尝试使用像对象一样使用一个 。

我的意思是 , 当你想到它时 , 这是显而易见的 , 但是如果你习惯于将数组视为它们自己的类型 , 那就很奇怪了 。
数组实际上只是一个数字索引对象 。 唯一的区别是 , 如果它是从您的日志构造的 , 则会获得小括号 , 并且会隐藏索引 。 Array[

我们看到: .[true true true

但实际上它看起来像:.{0: true 1: true 2: true
6. 类数组对象
就像数组可以像对象一样使用一样 , 对象也可以像数组一样使用:

我们将此对象称为“类似数组” , 因为它具有 and 索引 , 但它不是从 构造的 。 前面示例中的对象是类似数组的对象 。 lengthArrayarguments
7. 嵌套函数中的 this 关键字
您可能知道 , 它指的是函数中的全局对象 , 在方法中 , 它引用它所属的对象:this

有道理吧? 始终引用在其中声明函数并在全局作用域中声明的对象 。 thismyFunc
但这实际上不是真的 。 只有方法以这种方式运行 。 当在函数声明中使用时 , 它始终引用全局对象 , 即使它是在方法中声明的!this

这是函数表达式有用的原因之一...

函数表达式导致与声明它们的作用域相同 。 this
8. 函数属性
函数是对象 , 没有duh , 你现在肯定知道这一点 。 如果需要 , 可以向它们添加属性 , 并且它们已经具有属性 , 例如 和。 lengthnamecaller
因此 , 如果我创建一个函数 , 我可以向其添加内容并使用属性访问它们...arguments.callee

但是 , 您也可以在声明函数之前添加 prop:

这是有效的 , 因为函数语句被提升了 , 这意味着javascript将它们从代码中提取出来 , 并在其他任何东西之前定义它们 。
函数文本和函数表达式不会被吊起 , 因此它们都会中断...

但是在第一个示例中已经声明 , 因此我们可以向其添加所需的任何内容 。 myFunc
9. 功能不需要命名 , 当...
...它们被添加到数组中:

...从函数返回:

...赋值给变量:

...当它们被表达时:

10. 功能范围令人困惑
我的意思是 , 您几乎肯定知道这一点 , 但是您是否知道以下每个函数中的含义范围:this

myFunc— 引用, 因为对象方法始终引用它们的对象 。 myObj
myNestedFunc— 指因为脂肪箭头函数始终保持其创建位置的范围 。 myObj
mySuperNestedFunc— 指全球范围!
当一个函数被声明时 , 它总是引用全局范围 。 this
现在就这样!
那里的JS可能已经注意到这些提示大致遵循Javascript The Definitive Guide 。
在过去的几个月里 , 我一直在浏览它 , 并在这里添加了任何让我感到惊讶的东西(我是一个缓慢的读者 , 这是一本大书!