我遇到了JavaScript表现有些令人困惑的情况。
假设我们有一个带有两个键foo和bar的对象。
a = { foo: 1, bar: 2 }
Run Code Online (Sandbox Code Playgroud)
然后,我有一个字符串数组,在这种情况下是一个'foo'
b = ['foo']
Run Code Online (Sandbox Code Playgroud)
我期望以下几点:
a[b] == undefined
a[b[0]] == 1
Run Code Online (Sandbox Code Playgroud)
但是,这是发生了什么:
a[b] == 1
a[b[0]] == 1
Run Code Online (Sandbox Code Playgroud)
为什么将JavaScript ['foo'] -> 'foo'
用作键时会进行转换?
外面有人知道原因吗?
如何预防?
a = { foo: 1, bar: 2 }
Run Code Online (Sandbox Code Playgroud)
我正在尝试围绕解构任务进行实验。现在,我有一个案例,我试图应对自身的破坏。
例如,我有这样的输入:
let input = {latitude: "17.0009", longitude: "82.2108"}
Run Code Online (Sandbox Code Playgroud)
其中latitude
,longitude
键值是字符串,但我想在进行结构分解时将它们解析为数字。
let input = {latitude: "17.0009", longitude: "82.2108"}
Run Code Online (Sandbox Code Playgroud)
我可以在babel repl中看到这需要引用一个对象,然后访问每个键。因此,以上代码与以下代码相同:
"use strict";
var arr = {
latitude: "17.0009",
longitude: "82.2108"
};
var latitude = arr.latitude,
longitude = arr.longitude;
Run Code Online (Sandbox Code Playgroud)
我想做一些使用解构语法本身的事情。
"use strict";
var arr = {
latitude: "17.0009",
longitude: "82.2108"
};
var latitude = Number(arr.latitude),
longitude = Number(arr.longitude);
Run Code Online (Sandbox Code Playgroud)
我也很乐意看到一些技巧。
更新资料
我可以与,
操作员一起提出一些建议:
let input = {latitude: "17.0009", longitude: "82.2108"}
let {latitude,longitude} = input
console.log(typeof latitude,typeof …
Run Code Online (Sandbox Code Playgroud)我一直在阅读ES6中介绍的解构分配.
这种语法的目的是什么,它为什么被引入,以及它在实践中如何使用的一些例子?
我的Javascript函数导致控制台返回我:
TypeError:样式为null
以下是代码段:
let style = {
one: 1,
two: 2,
three: 3
}
function styling(style = style, ...ruleSetStock) {
return ruleSetStock.map(ruleSet => {
console.log(ruleSet)
return style[ruleSet]
})
}
console.log(styling(null, "one", "two", "three"))
Run Code Online (Sandbox Code Playgroud)
我不明白为什么。在我看来,一切都很好,
任何提示都会很棒,谢谢。
TL:DR; 是否有可能使对象的属性仅是可调用的(作为函数)?
我的意思是
class Foo{
bar(value){
return value
}
}
let newFoo = new Foo()
console.log(newFoo.bar(123)) // should work fine as function is invoked
console.log(newFoo.bar) // here i need to throw or display an error instead of returning value
Run Code Online (Sandbox Code Playgroud)
我尝试使用Proxy
and handler.get
trap 做到这一点,但是我不知道如何捕获它是函数调用还是属性访问,
class Foo {
bar(value) {
return value
}
}
const proxied = new Proxy(new Foo(), {
get: function(target, prop, reciver) {
if (prop === 'bar') {
throw new Error('Bar is method need to be invoced') …
Run Code Online (Sandbox Code Playgroud)错误:需要一个条件表达式,但看到一个赋值。( no-cond-assign
)
const re = /<%([^%>]+)?%>/g;
let match;
while (match = re.exec('<%hello%> you <%!%>')) {
console.log(match);
}
Run Code Online (Sandbox Code Playgroud)
执行while
循环来重新分配匹配项,但出现no-cond-assign
错误。我仍然可以获得没有错误的输出,但是纠正语法的最佳方法是什么?谢谢
我有以下代码。唯一有趣的部分是我productId
在第二个开关案例中重新声明。
let productId = 1;
const check = true;
switch (check) {
case false:
console.log(productId);
break;
case true:
let productId = 2;
console.log(productId);
break;
}
Run Code Online (Sandbox Code Playgroud)
如果我设置check
为true
,那么代码可以正常工作并打印
2
Run Code Online (Sandbox Code Playgroud)
如果我设置check
为false
,那么代码给出ReferenceError
/home/osama/workspace/test/javascript.js:7
console.log(productId);
^
ReferenceError: productId is not defined
at Object.<anonymous> (/home/osama/workspace/test/javascript.js:7:21)
at Module._compile (internal/modules/cjs/loader.js:778:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:622:3)
Run Code Online (Sandbox Code Playgroud)
如果我使用var
声明,productId
那么无论 的值如何,代码都可以正常工作 …
我有以下代码用特定的字符串替换左边的空格,但是,它没有按我想要的方式工作。
console.log(' asdadasdad as asdasd asasd'.replace(/^\s+/, 'x'))
Run Code Online (Sandbox Code Playgroud)
它用 x 改变了所有左边的空格,但它应该用一个 x 改变每个左边的空格。
但我只需要这个输出:
xxasdadasdad as asdasd asasd
我该怎么做 ?非常感谢。
我是从 javascript 背景进入 python 的。在 JS 中,我们可以进行数组方法链接,这很棒(尤其是使用箭头函数):
someArray
.filter(x => x.count > 10)
.sort((a, b) => a.count - b.count)
.map(x => x.name)
Run Code Online (Sandbox Code Playgroud)
在python中是否可以使用数组方法链接之类的东西,如果不能,那为什么不呢?
来自 MDN
异步函数通过事件循环以与其余代码不同的顺序运行,
但是,我不明白这对于一个不显式返回任何内容并且根本不使用 await 的简单函数意味着什么。在这种情况下声明一个函数 async 有什么用吗?它是否会在稍后执行以允许页面响应,例如在执行时?我的测试表明它是同步执行的,根本没有延迟:
async function foo() {
console.log('Start heavy stuff');
for (let i = 0; i < 90000000; ++i) {
Math.random()
}
console.log('Fnish heavy stuff')
}
foo();
console.log('All done, synchronously');
Run Code Online (Sandbox Code Playgroud)
日志按预期顺序显示,那么在这种情况下可以使用使此函数异步吗?这与使用 调用此函数有任何相似之处setTimeout(foo, 0)
吗?
javascript ×9
ecmascript-6 ×4
async-await ×1
es6-proxy ×1
eslint ×1
event-loop ×1
function ×1
node.js ×1
object ×1
python ×1
regex ×1
replace ×1
v8 ×1