![]() |
1
11
我刚刚在一次甜蜜的黑客大会上遇到了这个问题和线索,这涉及到一个评估对象是用还是new object()创建的Grail任务(我还没有弄清楚)。 不管怎样,我很惊讶地发现这里发布的isObjectLiteral()函数和我为palment.js项目编写的isObjectLiteral()函数之间的相似性。我相信这个解决方案是在我提交palment.js之前发布的,所以-向你致敬!我的优势是长度…少于一半(包括设置程序),但两者产生的结果相同。 看一看: function isObjLiteral(_obj) { var _test = _obj; return ( typeof _obj !== 'object' || _obj === null ? false : ( (function () { while (!false) { if ( Object.getPrototypeOf( _test = Object.getPrototypeOf(_test) ) === null) { break; } } return Object.getPrototypeOf(_obj) === _test; })() ) ); } 此外,一些测试材料: var _cases= { _objLit : {}, _objNew : new Object(), _function : new Function(), _array : new Array(), _string : new String(), _image : new Image(), _bool: true }; console.dir(_cases); for ( var _test in _cases ) { console.group(_test); console.dir( { type: typeof _cases[_test], string: _cases[_test].toString(), result: isObjLiteral(_cases[_test]) }); console.groupEnd(); } 或者在jsbin.com上… 一定要打开Firebug当你到达那里-调试文件是为IE爱好者。 |
![]() |
2
11
编辑:
我将“对象文字”解释为使用对象文字创建的任何内容
或
这个
我有一个即使在
以下是测试用例的HTML:
|
![]() |
3
5
听起来你在找这个:
对象的构造函数属性是指向用于构造该对象的函数的指针。在上面的例子中
更新:
CrescentFresh指出
但是:
在另一个答案中有一个很好的解释 here 以及更复杂的解释 here . 我认为其他的答案是正确的,没有真正的方法来检测这一点。 |
![]() |
4
4
对象文本是用于定义对象的符号,在javascript中,它总是以名称-值对的形式由大括号包围。一旦执行了这个操作,就无法判断对象是否是用这个符号创建的(实际上,我认为这可能是一个过度简化,但基本上是正确的)。你只有一个物体。这是关于JS的一个很好的地方,因为有很多短文要做的事情可能需要更长的时间来编写。简而言之,文字符号取代了必须写:
|
![]() |
5
3
你想要的是:
这将检查对象是否是使用
|
![]() |
6
2
无法区分从对象文字构建的对象与从其他方式构建的对象之间的区别。 这有点像询问您是否可以通过赋值“2”或“3-1”来确定是否构造了一个数值变量; 如果需要这样做,您必须在对象文本中放置一些特定的签名,以便稍后检测。 |
![]() |
7
1
我也有同样的问题,所以我决定这样做:
|
![]() |
Coli Culpepper · 具有原型和函数参数的对象中的对象文字 7 年前 |
![]() |
Mathieu Brouwers · 如何向嵌套对象文本添加键/值对? 7 年前 |
![]() |
lort · 在typescript中提供一种对象类型 7 年前 |
![]() |
Spencer Cornwall · 有没有办法访问对象文字的名称? 8 年前 |
![]() |
user1837608 · 如何将输入值与对象文本中的引用值进行比较? 10 年前 |