小编Cod*_*iac的帖子

当用作对象键时,JavaScript为什么将一个字符串的数组转换为字符串?

我遇到了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'用作键时会进行转换?

外面有人知道原因吗?

如何预防?

javascript

23
推荐指数
2
解决办法
625
查看次数

解构时如何将字符串解析为数字?

我正在尝试围绕解构任务进行实验。现在,我有一个案例,我试图应对自身的破坏。

例如,我有这样的输入:

let input = {latitude: "17.0009", longitude: "82.2108"}
Run Code Online (Sandbox Code Playgroud)

其中latitudelongitude键值是字符串,但我想在进行结构分解时将它们解析为数字。

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)

javascript destructuring ecmascript-6

19
推荐指数
3
解决办法
1306
查看次数

什么是解构分配及其用途?

我一直在阅读ES6中介绍的解构分配.

这种语法的目的是什么,它为什么被引入,以及它在实践中如何使用的一些例子?

javascript destructuring ecmascript-6

13
推荐指数
1
解决办法
1310
查看次数

javaScript函数-为什么我的默认参数失败?

我的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)

我不明白为什么。在我看来,一切都很好,

任何提示都会很棒,谢谢。

javascript function default-parameters ecmascript-6

11
推荐指数
1
解决办法
252
查看次数

使对象或类属性仅可调用

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)

我尝试使用Proxyand handler.gettrap 做到这一点,但是我不知道如何捕获它是函数调用还是属性访问,

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)

javascript object ecmascript-6 es6-proxy

7
推荐指数
1
解决办法
72
查看次数

Javascript While 循环条件与无条件分配错误

错误:需要一个条件表达式,但看到一个赋值。( 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错误。我仍然可以获得没有错误的输出,但是纠正语法的最佳方法是什么?谢谢

javascript eslint

5
推荐指数
1
解决办法
2604
查看次数

switch 语句中的 const 和 let 变量遮蔽

我有以下代码。唯一有趣的部分是我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)

如果我设置checktrue,那么代码可以正常工作并打印

2
Run Code Online (Sandbox Code Playgroud)

如果我设置checkfalse,那么代码给出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那么无论 的值如何,代码都可以正常工作 …

javascript v8 node.js

5
推荐指数
1
解决办法
1340
查看次数

用特定字符串替换所有左边的空格

我有以下代码用特定的字符串替换左边的空格,但是,它没有按我想要的方式工作。

console.log('  asdadasdad as asdasd asasd'.replace(/^\s+/, 'x'))
Run Code Online (Sandbox Code Playgroud)

它用 x 改变了所有左边的空格,但它应该用一个 x 改变每个左边的空格。

但我只需要这个输出:

xxasdadasdad as asdasd asasd

我该怎么做 ?非常感谢。

javascript regex replace

5
推荐指数
1
解决办法
94
查看次数

Python 中类似于 Javascript 的数组方法链接?

我是从 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中是否可以使用数组方法链接之类的东西,如果不能,那为什么不呢?

python

4
推荐指数
1
解决办法
659
查看次数

如果javascript“async”函数的主体中没有“await”,它是否会以任何不同的方式执行?

来自 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 event-loop async-await

4
推荐指数
1
解决办法
123
查看次数