声明这样的数组之间的真正区别是什么:
var myArray = new Array();
Run Code Online (Sandbox Code Playgroud)
和
var myArray = [];
Run Code Online (Sandbox Code Playgroud) 我需要创建一个对象文字数组,如下所示:
var myColumnDefs = [
{key:"label", sortable:true, resizeable:true},
{key:"notes", sortable:true,resizeable:true},......
Run Code Online (Sandbox Code Playgroud)
在这样的循环中:
for (var i = 0; i < oFullResponse.results.length; i++) {
console.log(oFullResponse.results[i].label);
}
Run Code Online (Sandbox Code Playgroud)
值的值key
应该results[i].label
在数组的每个元素中.
这个基于构造函数的语法创建对象有什么区别:
person = new Object()
Run Code Online (Sandbox Code Playgroud)
...和这个文字语法:
person = {
property1 : "Hello"
};
Run Code Online (Sandbox Code Playgroud)
虽然JSLint更喜欢使用对象文字表示法,但它们似乎都做同样的事情.
哪一个更好,为什么?
可以在这个小片段中看到该行为(将其作为全局脚本执行):
var name = {};
name.FirstName = 'Tom';
alert(name.FirstName);
Run Code Online (Sandbox Code Playgroud)
undefined
Chrome中的警报产生但可以在IE和Firefox中使用.当我这样做时,我也得到一个奇怪的价值
alert(name);
Run Code Online (Sandbox Code Playgroud) 很多人说你应该避免使用新的Object,新的Array()而是使用{}.[]和真/假.
使用文字结构获取Object或Array的新实例而不是使用new的好处是什么?我知道克罗克福德不喜欢新的,但这是主要论点吗?
写作更好吗?
var arr=[]; then var arr=new Array();
var obj={}; then var obj=new Object();
Run Code Online (Sandbox Code Playgroud)
如果是这样,为什么?
我阅读了关于这个想法的幻灯片第36页,但没有给出解释或示例为什么它更好.
<html>
<head>
<title>Array of images</title>
<script type="text/javascript">
var myPics = new Array[3];
myPics[0] = "./img/blue.png";
myPics[1] = "./img/red.png";
myPics[2] = "./img/yellow.png";
var counter = 0;
function preImg(){
alert(counter);
if(counter == 0)
counter = 4;
counter --;
alert(counter);
document.getElementById("coloredImg").src = myPics[counter];
}
function nextImg(){
if(counter == 3)
counter = -1;
counter ++;
document.getElementById("coloredImg").src = myPics[counter];
}
</script>
</head>
<body>
<img src="./img/blue.png" id="coloredImg" alt="Image not found"/>
<input type="button" onclick="preImg()" value="Previous"/>
<input type="button" onclick="nextImg()" value="Next"/>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题是我的计数器变量在函数内部未定义.例如,当我调用函数preImg时,它会使用undefined警告我(当它应该只是0时),第二个警告显示NaN时它应该是3.为什么我的函数不识别我的"var counter"它是全局的不是吗?你认为变量mypics会发生同样的情况吗?谢谢!
这三种创建阵列的方法有什么区别吗?如果没有,为什么前两种方式存在,如果它们只是更多的代码?
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) 我有一系列复选框,检查它们是否已经过检查,如果有,请在数组中添加一个字符串.然后我循环遍历字符串数组,并将数组中的字符串添加到以逗号分隔的新字符串中.不幸的是,这总是会导致错误.在Chrome中,控制台显示"无效字符串长度".在Firefox中,错误显示为"分配大小溢出".
JavaScript的:
// Compile List of Interests
interests = new Array();
if ( $("input[name=interestRoofing]").is(':checked') == true ) interests.push("Roofing");
if ( $("input[name=interestSiding]").is(':checked') == true ) interests.push("Siding");
if ( $("input[name=interestGutters]").is(':checked') == true ) interests.push("Gutters");
if ( $("input[name=interestWindows]").is(':checked') == true ) interests.push("Windows");
if ( $("input[name=interestPaint]").is(':checked') == true ) interests.push("Exterior Paint");
interestsString = "";
for ( i = 0; i < interests.length; i++ ) { // "Invalid String Length" in Chrome on This Line
interestsString = interestsString + interests[i]; // "Allocation Size Overload" in …
Run Code Online (Sandbox Code Playgroud) 我有以下代码,它试图生成一个随机数的二维数组:
var block_size = 32;
var can_width = can.width;
var color_depth = 12;
var passes = can_width / block_size;
var map_store = new Array(passes);
for(i=0;i<passes;i++) {
for(j=0;j<passes;j++) {
map_store[i] = new Array(passes);
color = Math.random() * color_depth;
map_store[i][j] = Math.round(color);
}
}
Run Code Online (Sandbox Code Playgroud)
如果我把console.log
语句放在循环中,这似乎工作正常,但是如果我尝试访问map_store
循环外的数组.它的所有元素都是未定义的.为什么是这样?
javascript ×11
arrays ×3
jquery ×2
object ×2
declaration ×1
html ×1
jslint ×1
performance ×1
string ×1
variables ×1