在Python 2和Python 3等其他语言中,您可以为元组变量定义和赋值,并检索它们的值,如下所示:
tuple = ("Bob", 24)
name, age = tuple
print(name) #name evaluates to Bob
print(age) #age evaluates to 24
Run Code Online (Sandbox Code Playgroud)
JavaScript中有类似的东西吗?或者我只需要用数组的丑陋方式来做:
tuple = ["Bob", 24]
name = tuple[0] //name Evaluates to Bob
age = tuple[1] //age Evaluates to 24
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法来模拟JavaScript 5中的Python元组?
考虑这个javascript代码:
var bar = function () { alert("A"); }
var foo = bar;
bar = function () { alert("B"); };
foo();
Run Code Online (Sandbox Code Playgroud)
运行此代码时,我得到"A".这种行为是javascript规范的一部分吗?我可以依赖它吗?
可能重复:
javascript数字 - 不可变
我读过Douglas Crockford的书:JavaScript:the Good Parts.它说JavaScript中的数字是不可变的.但JavaScript中的数字是按值复制的,我们可以使用operator ++来更改值.那么为什么说这是不可改变的呢?而且,如果它是不可变的,为什么数字是按值复制的?
在Redux中更改商店数组元素的最佳方法是什么?我有这3个工作解决方案.哪个是最好的?我认为前两种解决方案正在改变国家.这是真的吗?如果您有更好的解决方案,我会很感激.
在这个例子中我有一个订单列表,我想增加列表中一个订单的数量.我将此订单索引作为orderIndex传递.
第一种方式:
let order = state[action.orderIndex];
order.quantity++;
return Object.assign([],order);
Run Code Online (Sandbox Code Playgroud)
第二种方式:
let order= Object.assign([],state);
order[action.orderIndex].quantity++;
return Object.assign([],order);
Run Code Online (Sandbox Code Playgroud)
第三种方式:
return Object.assign([],state.map(
(order,index) => (index==action.orderIndex) ? {...order,quantity:order.quantity+1} : order)
);
Run Code Online (Sandbox Code Playgroud)
我有另一个解决方案,但它返回一个对象,我不知道如何在此解决方案中返回一个数组.:
return {...state,[action.orderIndex]:{...state[action.orderIndex],quantity:state[action.orderIndex].quantity+1}};
Run Code Online (Sandbox Code Playgroud) 我已经阅读了这里的问题和答案:
但是对我来说为什么数字(原始类型)是不可变的还不够清楚?仅仅因为他们创建了一个新的引用但没有覆盖该值?
如果在每个assignemt上创建一个新的引用
var x = 5;
x = 1;
Run Code Online (Sandbox Code Playgroud)
在下面的循环中我们会有 100 次新引用吗?
while (x < 101)
{
x++;
}
Run Code Online (Sandbox Code Playgroud)
这样有效率吗?我想我没有正确看待。
我的问题可能已经回答了,但我找不到搜索引擎中的谷歌或者bing不喜欢'+'(加号)登录搜索请求.
无论如何,为什么这是零
+[[]][0] // = 0
Run Code Online (Sandbox Code Playgroud)
这是一个
++[[]][0] // = 1
Run Code Online (Sandbox Code Playgroud)
UPD: Michael Berkowski有一个很好的答案,但我偷了不明白一件事
如果[[]][0]计算结果为空数组,那么,为什么++[]是ReferenceError: Invalid left-hand side expression in prefix operation
UPD2: 现在我明白了......似乎我试图在控制台中键入++ 0并获得错误,但我应该使用var a = 0; ++一个