我听说在初始化之前访问let和const值可能会导致ReferenceError因为称为时间死区的东西.
什么是暂时死区,它与范围和吊装有什么关系,以及在什么情况下遇到?
如您所知,有一个.bind()功能快捷方式的建议,所以您可以写:
::this.handleStuff
Run Code Online (Sandbox Code Playgroud)
它将在es5中像那样工作:
this.handleStuff.bind(this)
Run Code Online (Sandbox Code Playgroud)
我的问题是:这样可以传递参数吗?
我的意思是用上述快捷方式编写这个方法:
this.handleStuff.bind(this, 'stuff')
Run Code Online (Sandbox Code Playgroud)
这在React中是一个非常常见的模式,所以稍微缩短它会很好.
在Javascript中,您可以++在变量名称之前或之后使用运算符.这些增量变量的方法之间的区别是什么?
我喜欢Ruby的||=机制.如果变量不存在或是nil,则创建它并将其设置为等于:
amount # is nil
amount ||= 0 # is 0
amount ||= 5 # is 0
Run Code Online (Sandbox Code Playgroud)
我现在需要在JavaScript中做类似的事情.什么是惯例或正确的方法来做到这一点?我知道||=语法不正确.处理它的两种明显方法是:
window.myLib = window.myLib || {};
// or
if (!window.myLib)
window.myLib = {};
Run Code Online (Sandbox Code Playgroud) 我似乎无法将这个代码的第一部分(+ =)与三元运算符结合起来.
h.className += h.className ? ' error' : 'error'
Run Code Online (Sandbox Code Playgroud)
我认为这段代码的工作方式如下:
h.className = h.className + h.className ? ' error' : 'error'
Run Code Online (Sandbox Code Playgroud)
但这不正确,因为这会在我的控制台中出错.
所以我的问题是我应该如何正确地插入这段代码?
javascript variable-assignment conditional-operator operator-precedence compound-assignment
我有一个要求将??C#运算符应用于JavaScript,我不知道如何.在C#中考虑这个:
int i?=null;
int j=i ?? 10;//j is now 10
Run Code Online (Sandbox Code Playgroud)
现在我在JavaScript中设置了这个:
var options={
filters:{
firstName:'abc'
}
};
var filter=options.filters[0]||'';//should get 'abc' here, it doesn't happen
var filter2=options.filters[1]||'';//should get empty string here, because there is only one filter
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
谢谢.
编辑:我发现了一半的问题:我不能使用'indexer'表示对象(my_object[0]).有没有办法绕过它?(我事先不知道过滤器属性的名称,也不想迭代它们).
我最近将当前版本的json2.js与我在项目中的版本进行了比较,并注意到函数表达式的创建和自我执行方式有所不同.
用于在括号中包装匿名函数然后执行它的代码,
(function () {
// code here
})();
Run Code Online (Sandbox Code Playgroud)
但现在它将自动执行的函数包含在括号中.
(function () {
// code here
}());
Run Code Online (Sandbox Code Playgroud)
有通过CMS在接受答案的注释解释JavaScript的封装匿名函数的语法是"既:(function(){})();和(function(){}());有效."
我想知道有什么区别?前者是否通过绕过全局匿名函数来占用内存?括号应该放在哪里?
我以前没有看过这种语法,我想知道它的全部内容.
var { Navigation } = require('react-router');
Run Code Online (Sandbox Code Playgroud)
左侧的括号抛出语法错误:
意外的标记 {
我不确定webpack配置的哪个部分正在转换或者语法的目的是什么.这是和谐的事吗?有人可以开导我吗?
看一下在线源代码,我在几个源文件的顶部看到了这个.
var FOO = FOO || {};
FOO.Bar = …;
Run Code Online (Sandbox Code Playgroud)
但我不知道是什么|| {}.
我知道{}是等于new Object(),我认为这||是为了"如果它已经存在使用其值,否则使用新对象.
为什么我会在源文件的顶部看到这个?
如果您在这里阅读jQuery inArray页面上的注释,那么有一个有趣的声明:
!!~jQuery.inArray(elm, arr)
Run Code Online (Sandbox Code Playgroud)
现在,我相信双感叹号会将结果转换为类型boolean,值为true.我不明白的是,~在所有这些中使用了tilde()运算符是什么?
var arr = ["one", "two", "three"];
if (jQuery.inArray("one", arr) > -1) { alert("Found"); }
Run Code Online (Sandbox Code Playgroud)
重构if声明:
if (!!~jQuery.inArray("one", arr)) { alert("Found"); }
Run Code Online (Sandbox Code Playgroud)
分解:
jQuery.inArray("one", arr) // 0
~jQuery.inArray("one", arr) // -1 (why?)
!~jQuery.inArray("one", arr) // false
!!~jQuery.inArray("one", arr) // true
Run Code Online (Sandbox Code Playgroud)
我也注意到,如果我把波浪号放在前面,结果是-2.
~!!~jQuery.inArray("one", arr) // -2
Run Code Online (Sandbox Code Playgroud)
我不明白这里代字号的目的.有人可以解释一下或指向我的资源吗?
javascript ×10
ecmascript-6 ×2
syntax ×2
const ×1
iife ×1
increment ×1
jquery ×1
let ×1
namespaces ×1
operators ×1
or-operator ×1
ruby ×1
webpack ×1