我对人们所说的 Object Literals、JSON、JavaScript Objects 的确切含义感到困惑,对我来说它们看起来很相似:
{foo: 'bar', bar : 'baz'}
AFAIK,上面是对象文字,json以及javascript对象,不是吗?
对象字面量和 json 意思是一样的吗?
各位大佬怎么区分哪个是什么?
我对人们所说的 Object Literals、JSON、JavaScript Objects 的确切含义感到困惑,对我来说它们看起来很相似:
{foo: 'bar', bar : 'baz'}
AFAIK,上面是对象文字,json以及javascript对象,不是吗?
对象字面量和 json 意思是一样的吗?
各位大佬怎么区分哪个是什么?
该变量jsonString
包含一个 JSON 字符串:
var jsonString = '{"foo": "bar", "bar" : "baz"}'
该变量javascriptObject
包含一个使用对象字面量初始化的 javascript 对象:
var javascriptObject = {foo: 'bar', bar : 'baz'}
您可以使用 将 json 字符串转换为 javascript 对象JSON.parse
,然后使用JSON.stringify
.
JSON只是一种数据格式,类似于 XML。真正的 JSON 应该有用双引号括起来的键,如下所示:
{"foo":"bar"}
JavaScript 对象是 JavaScript 语言的一部分,并且具有相关的东西,例如原型。
对象字面量是用括号创建一个 javascript 对象,而不是使用new
关键字 or Object.create()
。
//object literal
var foo = {};
//equivalent
var foo = new Object();
AFAIK,上面是对象文字,json以及javascript对象,不是吗?
它是一个对象字面量。它创建一个对象。
它不是 JSON,因为它不符合语法(它是对象文字符号的子集)。没有引用键,并且在值周围使用了错误类型的引号('
而不是)。"
你们如何区分哪个是什么?
语境。
JSON 通常不会出现(嵌入)在 JavaScript 程序的中间。它是一种数据格式,通常显示为整个文件(或 HTTP 响应)。
当某物需要一个对象时,它可以从对象文字或变量(或函数调用的返回值等)中获取一个。
JSON 起源于 JavaScript 的对象文字表示法,它本身就是一个字符串。这解释了相似性,当只是看着它。今天,JSON 被用作序列化各种数据的通用手段,然后再通过某个网络提交或存储它。
// this is a JSON variable
var json = '{"foo": "bar", "bar" : "baz"}';
// obj is a JavaScript obj, defined by the object literal on the right hand side
var obj = {foo: 'bar', bar : 'baz'};
在 JS 中,您可以使用以下方法将 JSON 字符串转换为对象
var obj = JSON.parse( json );
并通过以下方式获取对象(不包括附加函数)的 JSON 表示
var json = JSON.stringify( obj );
根据规范,在 JSON 中,所有字符串,无论是值还是关键字,都应该用双引号括起来。
如果您的示例包含以下内容,它将是一个有效的 JSON 字符串:
{"foo": "bar", "bar": "baz"}
对象字面量:
参考Mozilla,
对象字面量是对象的零或多对属性名称和关联值的列表,用花括号 ({}) 括起来。
Javascript 对象:
参考Mozilla,
在 JavaScript 中,对象是一个独立的实体,具有属性和类型
JSON:
JSON(JavaScript Object Notation)是一种数据交换格式。它非常类似于 JavaScript 语法的一个子集,尽管它不是一个严格的子集。JSON 是一种用于序列化对象、数组、数字、字符串、布尔值和 null 的语法。它基于 JavaScript 语法但又有所不同:有些 JavaScript 不是 JSON,有些 JSON 不是 JavaScript。
用松散的话说,
Anobject
是一个可以具有属性和类型的 javascript 变量。
Anobject literal
是一种将属性和关联值分配给 的方法object
。
JSON 更严格地object literal
用于数据交换,它被包装为字符串。
(通常,严格性是允许所有语言使用它,我们不能function
用作值,key
应该始终用双引号引起来(在对象文字中它不是强制性的))