为什么在undefined.bar
执行时访问var foo1 = false;
var foo2;
console.log(foo1.bar); // undefined
console.log(foo2.bar); // Uncaught TypeError: Cannot read property 'bar' of undefined
不会抛出错误?
public class Equip : MonoBehaviour
{
public string equipJson;
void Start ()
{
equipJson = File.ReadAllText (Application.dataPath + "/Resources/equip.json");
DataSet dataSet = JsonConvert.DeserializeObject<DataSet>(equipJson);
}
}
答案 0 :(得分:1)
环顾四周“拳击”,你会发现许多答案已经写好了。
总结一下,Boolean
,Number
和String
个实例会在您将它们视为对象的上下文中神奇地“封装”原始值。布尔值没有任何有用的方法或属性,除了默认的Object继承的方法或属性,所以你永远不会看到布尔拳击。但语言允许它。
但是,没有Null
或Undefined
构造函数来设置这些值,因此尝试访问null
和undefined
的属性是错误的。
答案 1 :(得分:0)
在你的例子中,foo1实际上是存在的,所以我们可以在它上面检查一个属性(它没有定义名为&#34的属性; bar&#34;,所以我们得到一个未定义的)。
另一种情况,foo2,不存在(它永远不是init并且仍未定义),因此尝试检查属性将导致错误。
答案 2 :(得分:0)
因为false
本身就是一个对象,而undefined
不是。
如果尚未为您分配值,则变量为undefined
,例如代码中的foo2
。您正在尝试访问不存在的属性,因此JS会感到害怕并抛出错误。
当您尝试访问foo1
时,对象foo1
已存在,因为您已为其分配了false
。 JS并不介意这个对象没有&#34; bar&#34;属性,只会返回undefined
,如&#34;此属性尚未定义&#34;。