最近,我通过Crockford的JSLint运行了一些我的JavaScript代码,它给出了以下错误:
第1行问题1:缺少"使用严格"声明.
做一些搜索,我意识到有些人会加入"use strict";
他们的JavaScript代码.一旦我添加了语句,错误就会停止显示.不幸的是,谷歌没有透露这个字符串声明背后的历史.当然它必须与浏览器如何解释JavaScript有关,但我不知道效果会是什么.
那么它是"use strict";
什么,它意味着什么,它是否仍然相关?
当前的任何浏览器都会响应"use strict";
字符串还是将来使用?
使用JavaScript数组,我可以使用单个赋值将其重置为空状态:
array.length = 0;
Run Code Online (Sandbox Code Playgroud)
这使得数组"显示"为空并准备重用,据我所知,这是一个单一的"操作" - 即恒定时间.
是否有类似的方法来清除JS对象?我知道我可以迭代它的字段删除它们:
for (var prop in obj) { if (obj.hasOwnProperty(prop)) { delete obj[prop]; } }
Run Code Online (Sandbox Code Playgroud)
但这具有线性复杂性.
我也可以把对象扔掉并创建一个新对象:
obj = {};
Run Code Online (Sandbox Code Playgroud)
但是"混杂"创建新对象会导致IE6上的垃圾收集问题.(如此处所述)
每个JS意见领袖都说扩展原生对象是一种不好的做法.但为什么?我们是否获得了性能?他们是否害怕有人以"错误的方式"做到这一点,并添加了可枚举的类型Object
,几乎破坏了任何对象上的所有循环?
以TJ Holowaychuk的should.js为例.他增加了一个简单的getter来Object
,一切工作正常(来源).
Object.defineProperty(Object.prototype, 'should', {
set: function(){},
get: function(){
return new Assertion(Object(this).valueOf());
},
configurable: true
});
Run Code Online (Sandbox Code Playgroud)
这真的很有道理.例如,可以扩展Array
.
Array.defineProperty(Array.prototype, "remove", {
set: function(){},
get: function(){
return removeArrayElement.bind(this);
}
});
var arr = [0, 1, 2, 3, 4];
arr.remove(3);
Run Code Online (Sandbox Code Playgroud)
是否有任何反对扩展本机类型的论据?
我正在使用String split方法,我想拥有最后一个元素.Array的大小可以改变.
例:
String one = "Düsseldorf - Zentrum - Günnewig Uebachs"
String two = "Düsseldorf - Madison"
Run Code Online (Sandbox Code Playgroud)
我想拆分上面的字符串并得到最后一项:
lastone = one.split("-")[here the last item] // <- how?
lasttwo = two.split("-")[here the last item] // <- how?
Run Code Online (Sandbox Code Playgroud)
我不知道运行时数组的大小:(
我花了几个小时,只是找出我拼错字.length
作为.lenght
.它可以正常运行,完全没有警告.为什么...?
我'use strict'
在Node.js 10.13.0上使用并运行.
码:
'use strict';
let arr = [1, 2, 3, 4];
for(let i = 0; i < arr.lenght; i++) {
console.log(arr[i]);
}
Run Code Online (Sandbox Code Playgroud)
使用如下代码是不好的:
var a = [1,2,3,4];
a.length = 2; // 3 and 4 are removed
Run Code Online (Sandbox Code Playgroud)
它有不错的浏览器支持吗?删除的值是否正确收集垃圾?
有没有办法在没有请求对象句柄的情况下全局中止所有Ajax请求?
我问的原因是我们有一个非常复杂的应用程序,我们使用setTimeOut()在后台运行许多不同的Ajax请求.如果用户单击某个按钮,我们需要暂停所有正在进行的请求.
我刚看了一眼:
http://jsperf.com/array-destroy/32
我不明白第一个怎么样:
arr.length = 0;
Run Code Online (Sandbox Code Playgroud)
可以慢于:
while (arr.length > 0) {
arr.shift();
}
Run Code Online (Sandbox Code Playgroud)
有人可以联系/解释原因吗?
javascript ×9
arrays ×3
performance ×2
clear ×1
java ×1
jquery ×1
jslint ×1
prototype ×1
split ×1
string ×1
syntax ×1
use-strict ×1