我有一个没有原型的JavaScript对象。
var foo = Object.create(null);然后,我读取了一个JSON文件(在Node.js中),并使用JSON.parse()将其分配给foo。如下所示:
fs.readFile('talks.json', 'utf8', function(err, text) {
if (err) {
throw error;
}
foo = JSON.parse(text);
});但是,当我检查foo的原型时,它不再是最初打算成为的null了。
有什么方法可以让foo的原型再一次消失吗?
发布于 2018-01-15 10:20:47
JSON.parse()方法接受回调,该回调可用于将对象转换为无原型对象。
JSON.parse(string, function(k, v) {
if (v && typeof v === 'object' && !Array.isArray(v)) {
return Object.assign(Object.create(null), v);
}
return v;
});发布于 2018-05-09 17:23:16
我也遇到了同样的问题,我找到的解决方案是使用Object.assign()
var prototypeLessTalks = Object.create(null);
var talksParsed = JSON.parse(readFileContent('./talks.json', 'utf8'));
Object.assign(prototypeLessTalks, talksParsed); // here
function readFileContent(fileName, encoding) {
return fs.readFileSync(fileName, encoding, (err, data) => {
if (err) throw err;
return data.toString();
});
}Object.assign()不覆盖目标对象已经存在的属性。
发布于 2017-07-05 09:40:21
我不能百分之百地肯定这一点,但我认为这里的问题是javascript必须指定一个原型。如果使用.prototype检查原型,则值为undefined。如果您使用.__proto__检查,它是一个空白对象。
这是有意义的,因为即使没有定义,原型也不应该是空的。程序员不应该使用.__proto__。如果您必须检查原型,请使用.prototype。
var foo = Object.create(null);
console.log(foo); //{}
console.log(foo.__proto__); //undefined
console.log(foo.prototype); //undefined
var foo = JSON.parse("{\"a\":\"bla\"}");
console.log(foo); //like in the JSON string
console.log(foo.__proto__); //{}
console.log(foo.prototype); //undefined
https://stackoverflow.com/questions/44922153
复制相似问题