在另一个问题中,用户指出该new关键字使用起来很危险,并提出了一种不使用的对象创建解决方案new.我不相信这是真的,主要是因为我使用了Prototype,Scriptaculous和其他优秀的JavaScript库,并且每个人都使用了new关键字.
尽管如此,昨天我在YUI剧院观看道格拉斯·克罗克福德的演讲,他说的完全一样,他new在代码中不再使用关键字(Crockford on JavaScript - Act III:Function the Ultimate - 50:23分钟).
使用new关键字"不好" 吗?使用它有哪些优缺点?
我有一个javascript对象(我实际上通过ajax请求获取数据):
var data = {};
Run Code Online (Sandbox Code Playgroud)
我添加了一些东西:
data[0] = { "ID": "1"; "Status": "Valid" }
data[1] = { "ID": "2"; "Status": "Invalid" }
Run Code Online (Sandbox Code Playgroud)
现在我想删除状态无效的所有对象(但保持所有顺序相同):
var tempData = {};
for ( var index in data ) {
if ( data[index].Status == "Valid" ) {
tempData.push( data );
}
}
data = tempData;
Run Code Online (Sandbox Code Playgroud)
在我看来,所有这一切都应该工作,但我收到一个错误,tempData.push不是一个函数.我理解为什么它与数组不一样,但我能做什么呢?
JSLint给了我这个错误:
第11行第33个问题:使用数组文字符号[].
var myArray = new Array();
Run Code Online (Sandbox Code Playgroud)
什么是数组文字符号?为什么它要我使用它?
它显示在这里new Array();应该工作正常......有什么我想念的吗?
我不明白为什么当我使用JavaScript文件运行JSLint时收到错误消息.
os_map = {}; Problem at line 28 character 36: Use the array literal notation [].如果我在JSLint中运行此代码,我会收到消息var .JSLint的选项如下.
/*jslint onevar: true, browser: true, undef: true, nomen: true, eqeqeq: true, plusplus: true, bitwise: true, regexp: true, strict: true, newcap: true, immed: true */
Run Code Online (Sandbox Code Playgroud)
声明对象(,它{})应该没问题,但JSLint建议使用空数组(,这是[])
:我找到了答案.我错了.这没什么不对var os_map = {}.代码显示在错误消息中,因为我没有使用"require strict";.我收到错误消息错误.谢谢回答我的问题.
这段代码出了什么问题?
var divarray = document.getElementById("yui-main").getElementsByTagName("div");
var articleHTML = array();
var absHTML;
var keyHTML;
var bodyHTML = array();
var i = 0;
for ( var j in divarray) {
if(divarray[i].className == "articleBody"){
alert("found");
articleHTML = divarray[i];
break;
}
bodyHTML[i] = '';
if(articleHTML[i].className == "issueMiniFeature"){continue;}
if(articleHTML[i].className == "abstract"){absHTML = articleHTML[i]; continue;}
if(articleHTML[i].className == "journalKeywords"){keyHTML = articleHTML[i]; continue;}
bodyHTML[i] = articleHTML[i];
i++;
}
Run Code Online (Sandbox Code Playgroud)
这是我得到的错误:
ReferenceError: array is not defined
Run Code Online (Sandbox Code Playgroud)
我正在使用谷歌浏览器,如果它有帮助.
这三种创建阵列的方法有什么区别吗?如果没有,为什么前两种方式存在,如果它们只是更多的代码?
1:
var myCars=new Array();
myCars[0]="Saab";
myCars[1]="Volvo";
myCars[2]="BMW";
Run Code Online (Sandbox Code Playgroud)
2:
var myCars=new Array("Saab","Volvo","BMW");
Run Code Online (Sandbox Code Playgroud)
3:
var myCars=["Saab","Volvo","BMW"];
Run Code Online (Sandbox Code Playgroud) if (!Number.prototype.toZeroPaddedString) {
Number.prototype.toZeroPaddedString = function (count) {
"use strict";
var str = this.toString();
return (new Array(count + 1 - str.length)).join('0') + str;
};
}
Run Code Online (Sandbox Code Playgroud)
我希望我的代码能够通过jsLint标准清理,但是,我无法想象如何根据我想做的事情摆脱这个错误.
有什么建议?
谢谢.
所以这就是我到目前为止所做的:
<script>
text = new Array("t", "te", "tes", "test");
for(new i; i < text.length; i++)
{
document.getElementById('text').innerHTML=text[i];
}
</script>
<body>
<span id='text'></span>
</body>
Run Code Online (Sandbox Code Playgroud)
我稍后会添加一个计时器,但我的问题是,为什么我得到"ReferenceError'i'未定义"?它被定义为你可以看到..提前谢谢.