javascript属性和javascript变量有什么区别?

时间:2014-10-17 08:56:38

标签: javascript object properties

在javascript中分配值时,我遇到了这个

var obj = {
  resultCodeId: data[i].resultCodes[j].resultCodeId
};
var resultCodeId= data[i].resultCodes[j].resultCodeId;

如何做':'和' =' javascript根本不同?变量也有属性或只是javascript中的对象有属性吗?

5 个答案:

答案 0 :(得分:5)

=用于对象属性或全局/局部变量赋值。 :仅用于对象定义中的属性赋值。

此外: 你可以delete一个财产。 你不能delete变量。

var obj = {
  p1: 'im p1',
  p2: 2
};
obj.p1 = 'im updated p1'; // assign a new value to object property
var v = 'just a var'; // is global outside a function and local inside a function

delete obj.p1; // is ok
delete v; // is not ok

答案 1 :(得分:2)

属性通常与javascript对象相关联。

var obj = {
  name: 'test', --> property
  getName: function(){ --> property
    return this.name
  }
};

相反的变量在函数内部使用,甚至在函数内部使用。

var global = "string"; --> variable
function test(){
  var local = "string"; --> variable
}

但是属性和变量的基本思想保持不变,即存储或指向内存中的对象。

  • ':'只要您想将属性与对象关联,就会使用它。

  • ' ='只要您想将实际数据或引用存储在内存中,就会使用

答案 2 :(得分:1)

以对象方式使用':'将键指定为键/值对。 '='是赋值运算符。它为一个值赋值。

是的,变量可以具有属性,因为可以为变量分配对象。

答案 3 :(得分:0)

让我们举例说明,

  • var obj = {resultCodeId:data [i] .resultCodes [j] .resultCodeId}; 这意味着resultCodeId是“obj”对象的成员。您可以像 obj.resultCodeId 一样访问它。
  • var resultCodeId = data [i] .resultCodes [j] .resultCodeId; 这是一个全局变量,所有全局变量都是窗口对象的属性。因此您可以像 window.resultCodeId 一样访问它。

另外:

var resultCodeId = data [i] .resultCodes [j] .resultCodeId; 对象/函数中的此语句将被视为局部变量,并且只能在该对象/函数中访问。

答案 4 :(得分:0)

使用成员函数会有很大的不同。局部变量立即可见,但属性不可见。他们需要this。但是-这是最大的不同-有时成员函数根本看不到它们自己的属性。一些带有基本构造函数的标准代码:

function Cat() { // constructor with a var and property
  var a="local a"; // variable
  this.b="local b"; // property

  this.showBad = function() { return a+", "+b; } // local a, but searches for b in global
  this.showGood = function() { return a+", "+this.b; } // local a and b (but has a bug, explained below)
}

var c1=new Cat(); // using the constructor
var a="GLOBAL A", b="GLOBAL B"; // if we can't see c1's locals, we get these

console.log(c1.showBad()); // local a, GLOBAL B // oops on B
console.log(c1.showGood()); // local a, local b // works fine, using "this"

到目前为止,没什么大不了的。属性需要this,而变量则不需要(实际上它们没有)。小东西。但是this并不总是有效。在javascript成员函数this中可以是任何东西。如果您习惯了OOP语言,那似乎是错误的。在这里,我们将c1.showGood设置为全局范围的情况下称为this

var sGood=c1.showGood; // sGood is the function "c1.showGood"
console.log(sGood()); // local a, GLOBAL B // Argg. this.b didn't work!

那似乎是假的,但类似的事情可能发生。由于这两件事(变量始终可用,并且我们需要一种可靠的方法来始终查看我们的属性),因此一个标准的技巧是在构造过程中将this锁定在变量中。它很好地显示了var / property差异:

function Cat() { // constructor with a var and property
  var self = this; // self is our permanent, always visible link to this Cat
  this.a="local a";
  this.b="local b";

  this.showGood = function() { return self.a+", "+self.b; }
}

self是一个变量,所以我们的showGood总是可以找到我们的。同时,ab只能使用self完成的链接来找到。