相关疑难解决方法(0)

为什么arr = []比arr = new Array更快?

我运行此代码并得到以下结果.我很想知道为什么[]更快?

console.time('using[]')
for(var i=0; i<200000; i++){var arr = []};
console.timeEnd('using[]')

console.time('using new')
for(var i=0; i<200000; i++){var arr = new Array};
console.timeEnd('using new')
Run Code Online (Sandbox Code Playgroud)
  • 使用[]:299ms
  • 使用new:363ms

感谢Raynos,这里是此代码的基准,以及一些更可行的方法来定义变量.

在此输入图像描述

javascript performance

144
推荐指数
2
解决办法
5万
查看次数

Chrome控制台清除分配和变量

我正在学习JavaScript并且已经在Chrome控制台中进行了大量测试.即使我清除控制台,或者使用我在其他线程中看到的任何命令(localStorage.clear()),我指定的任何变量仍会显示出来.

例如,如果我做了类似的事情 localStorage.clear()

在此输入图像描述

我清理并关闭控制台,重新打开它,然后寻找var name = "Bob";它的价值,它仍然存在name.

在此输入图像描述

清除这些的最佳方法是什么?

javascript google-chrome-devtools

42
推荐指数
4
解决办法
3万
查看次数

让let语句在全局对象上创建属性吗?

在JavaScript中,var声明在全局对象上创建属性:

var x = 15;
console.log(window.x); // logs 15 in browser
console.log(global.x); // logs 15 in Node.js
Run Code Online (Sandbox Code Playgroud)

ES6引入let了具有块范围的声明的词法作用域.

let x = 15;
{
   let x = 14;
}
console.log(x); // logs 15;
Run Code Online (Sandbox Code Playgroud)

但是,这些声明是否在全局对象上创建属性?

let x = 15;
// what is this supposed to log in the browser according to ES6?
console.log(window.x); // 15 in Firefox
console.log(global.x); // undefined in Node.js with flag
Run Code Online (Sandbox Code Playgroud)

javascript let ecmascript-6

41
推荐指数
3
解决办法
2863
查看次数

Javascript:{} vs new Object()性能

我想理解为什么两者都做同样的事情时性能上的差异?

在此输入图像描述

基准

javascript performance

25
推荐指数
1
解决办法
1万
查看次数

全局范围内的console.log(!status)产生意外结果

进入一个有趣的问题.我正在努力尝试切换分配给变量的布尔值.它没有用,最终我尝试了这段代码.

var status = false;
console.log(!status);
Run Code Online (Sandbox Code Playgroud)

我希望它能true在控制台中提供,但我得到了false.我认为javascript会首先在括号内运行代码以找到它的值,然后在console.log中运行该值.你能解释一下为什么我没有true在控制台中获得价值吗?

javascript console.log

22
推荐指数
1
解决办法
676
查看次数

var name在Javascript中产生奇怪的结果

让我们说我们有这个代码段:

var name = ["Apples","Oranges","Strawberries"];
console.log(name.length);
Run Code Online (Sandbox Code Playgroud)

这段代码产生了这个奇怪的结果27 !! 问题似乎是使用变量名称作为"名称",它看起来像一个保留关键字.

但任何人都可以解释为什么这种奇怪的行为?

javascript variables

13
推荐指数
2
解决办法
399
查看次数

如何避免意外地隐式引用全局对象上的属性?

是否可以在没有with(global)所有脚本默认具有的隐式上下文的情况下执行代码块?例如,在浏览器中,是否可以通过任何方式设置脚本,使诸如

const foo = location;
Run Code Online (Sandbox Code Playgroud)

抛出

未捕获ReferenceError:未定义位置

而不是访问window.location,何时location未先声明?缺少这一点,有没有办法使这种隐式引用导致某种警告?在编写代码时,它可能是错误的来源(见下文),因此有一种防范它的方法可能会很有用。

(当然,由于普通的作用域规则,可以使用constlet或在内部块中声明另一个具有相同名称的变量,以确保使用该变量名称引用的是新变量而不是global属性,但这不是一样。)

这可能类似于询问是否可以从实际 with语句中停止引用属性:

const obj = { prop: 'prop' };
with (obj) {
  // how to make referencing "prop" from somewhere within this block throw a ReferenceError
}
Run Code Online (Sandbox Code Playgroud)

众所周知,with不应该首先使用它,但是不幸的是,当谈到时,我们似乎别无选择with(global),因为它偶尔会节省一些字符,但会浪费一些经常弹出的错误:1 2 3 4 5 6。例如:

(这里的问题:window.status是保留属性-分配给它时,它会将分配的表达式强制转换为字符串)

with阻止或禁止显式使用此类错误的原因相同,但with(global)即使在严格模式下,隐式错误也继续引起问题,因此找出解决方法将非常有用。

javascript scope with-statement

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

JavaScript中的"name"变量有什么特别之处?

在Chrome开发者工具窗口中,我输入了:

> name = ["a", "b", "c"]
["a", "b", "c"]
Run Code Online (Sandbox Code Playgroud)

但是,name成了一个字符串:

> typeof name
"string"
> name
"a,b,c"
> name[1]
","
Run Code Online (Sandbox Code Playgroud)

对于其他变量名称显然不是这样!

> foo = ["a", "b", "c"]
["a", "b", "c"]
> typeof foo
"object"
> foo[1]
"b"
Run Code Online (Sandbox Code Playgroud)

并且name被定义为页面加载时的空字符串(据我所知,除了字符串之外不能成为任何其他内容).

那么,有什么用name

javascript google-chrome

10
推荐指数
1
解决办法
269
查看次数

var name和window.name

如果我定义一个名为的JavaScript全局变量name,是否会隐藏window.name属性?

我在Facebook JavaScript身份验证API的上下文中提出这个问题,因为我注意到具有该名称的全局会破坏它,并且因为我看到它window.name在他们的代码中使用.

javascript

8
推荐指数
2
解决办法
1260
查看次数

为什么我的变量显示它已被弃用?

我的编辑器 (VS Code) 显示我的变量名已被弃用。从第 2 行开始,它有一个斜线。你能帮我吗?

let name = 'Mark';
name = 5;
console.log(name);
Run Code Online (Sandbox Code Playgroud)

javascript

8
推荐指数
1
解决办法
2万
查看次数