【发布时间】:2020-10-27 11:27:28
【问题描述】:
我在 javascript 中编写了一个 Prototype 函数来确定实体是否是有效的 Javascript 对象。类似以下的东西
// Check if Object is Valid & Have at least one element
Object.prototype._isValidObject = function () {
return this && typeof this === 'object' && !Array.isArray(this) && Object.keys(this).length >= 1;
};
问题是它为大多数值返回 TRUE,甚至对于 string,因为 this 被视为对象任何值,如数组、字符串或 json 等。可能有其他方法可以做到这一点,但我需要为此创建一个原型函数。请确定确定值是否是具有至少一项的有效 Javascript 对象的正确方法。谢谢
编辑 通过有效的 Javascript / JSON 对象,我的意思是这样的:
{
id:100,
name:'somename',
email:'maiL@mail.com'
}
更准确地说,以下是我想要的:
const j = {id:100,name:'somename', email:'maiL@mail.com'};
const s = "{id:100, name:'somename', email:'maiL@mail.com'}";
j._isValidObject(); // Should return true
s._isValidObject(); // Should return false
const j 对我有效,因为它是一个具有键值对的对象。 const s 对我无效,因为它是对象的字符串表示形式,而不是对象本身。 const s 可以像 const j 一样转换为有效的 Object,但现在 const s 只是一个字符串。
编辑 我找到了解决方案,并将其发布在答案中。尽管我没有将其标记为已接受的答案,因为我不确定这是否是最好的方法。如果有人有更好的解决方案,请发布。谢谢
【问题讨论】:
-
请先定义什么是“有效的 JSON 对象”。
-
根据定义,任何 Javascript 对象都是有效的对象,因为几乎任何东西都是对象,所以几乎所有东西都是对象。询问您要排除的具体内容可能更容易。
-
现在我们已经了解了什么是 JavaScript 对象,您仍然需要定义什么构成“有效” JavaScript 对象。日期对象是否有效? DOM 元素对象是否有效?
-
Turning this around, 您要解决什么问题?您不知道是否有任何特定变量包含必须解码的 JSON 字符串或已解码的值?如上面我的字符串示例所示,这是一个糟糕的情况,因为这个问题通常不能真正回答字符串。这是一个需要通过更好地定义数据流来解决的问题;即你应该知道在任何时候你是否期望有 JSON 或 Javascript 值。您根本不需要猜测。
标签: javascript json javascript-objects