访问json中的数据却没有得到密钥

access data in json not getting the key

本文关键字:密钥 json 数据 访问      更新时间:2023-09-26

var data = [{
	"error": false,
	"date": "09-02-2016",
	"day": "5",
	"checkin": "20:29:11",
	"checkout": null,
	"break_timein": null,
	"break_timeout": null,
	"checkin_remarks": "test",
	"checkout_remarks": null,
	"break_time_remarks": null
}];
console.log(data[0].checkin)
console.log(data[0].break_timein)
console.log(data[0].break_timein.length > 0 || data[0].break_timein != null)

对于break_timein,当我console.log它时,它返回null,但当我得到长度时,它会返回Cannot read property 'length' of null

为什么会这样?

我知道它只在没有属性break_timein但只有null 的情况下出现

你在这里得出了错误的结论。该错误与属性是否存在无关。

当一个属性不存在,并且你试图访问它上的属性时,你会得到以下错误:

var foo = {};
foo.bar.baz;
// Uncaught TypeError: Cannot read property 'baz' of undefined

这句话中的"undefined"不是指属性的存在,而是指undefined。在JavaScript中,当访问一个属性不存在时,访问它将返回值undefined:

foo.bar
// undefined

还有创建undefined的其他情况,例如,当您定义一个没有初始值的变量时:

var abc;
abc;
// undefined

知道我们可以测试当我们直接访问undefined:上的属性时会发生什么

undefined.foo
//  Uncaught TypeError: Cannot read property 'foo' of undefined

这引发了与上面相同的错误,因此与属性访问无关。


因此,现在我们已经确定undefined不能在属性访问上下文中使用。

null是另一个类似的值:

null.foo
// Uncaught TypeError: Cannot read property 'foo' of null

是什么使nullundefined与其他显示这种行为的基元值(字符串、数字、布尔值(不同?

nullundefined实际上是两种唯一数据类型的值:Null和Undefined。

的那些数据类型没有对象包装器。字符串、数字和布尔值可以以两种形式存在:作为基元值和作为对象值:

var primitive = "foo";
var object = new String("foo");

当您访问基元值(例如"foo".length(上的属性时,JavaScript会自动将基元值转换为临时对象值,类似于new String("foo").length

但是,由于没有与Null and Undefined等价的对象(从没有NullUndefined函数的事实中可以明显看出(,因此无法执行此操作,因此会引发错误。

这里,null没有任何属性,例如长度,这就是为什么它抛出一个错误,说"Cannot read property 'length' of null"。你应该这样写声明:

console.log(data[0].break_timein != null || data[0].break_timein.length > 0);