考虑一下:
var a = {}, b = a;
Run Code Online (Sandbox Code Playgroud)
就规格而言,b = a归结为PutValue(b, GetValue(a)),对吧?并GetValue(a)使用GetBindingValue("a", strictFlag)抽象操作,返回"值" a.而"价值"是最初分配给的"对象" a.然后存储"对象" b,就像任何其他值一样.
但究竟什么是"对象"呢?规范在哪里说Object类型的值与原语的行为不同?只是原语是不可变的,对象是可变的吗?
我问,因为我们在尝试解释对象的行为时总是谈论"对象引用"和"引用值",但我找不到与规范中类似的东西.
好的,我们都知道有效的左侧表达式是什么.的种类.*
但是,看看ECMA-Script标准的定义,我很困惑:
LeftHandSideExpression :
NewExpression
CallExpression
Run Code Online (Sandbox Code Playgroud)
这只是定义中的错误,还是我在这里弄错了?我的意思是,这实际上并不意味着
new Object = 1; // NewExpression AssignmentOperator PrimaryExpression
function () { return foo; }() = 1;// CallExpression AssignmentOperator PrimaryExpression
Run Code Online (Sandbox Code Playgroud)
应该是有效的赋值表达式?
*从我谦虚的理解,这将更有意义:
LeftHandSideExpression :
Identifier
MemberExpression [ Expression ]
MemberExpression . IdentifierName
CallExpression [ Expression ]
CallExpression . IdentifierName
Run Code Online (Sandbox Code Playgroud)
我一直试图理解如何this在javascript中设置值,并发现ECMAScript语言规范非常有用.我是读取部分8.7 reference specification type,发现在该ECMAScript的参考是由3成分,base value,referenced name,strict reference flag理解部分11.2.3.
我可以假设是什么referenced name,并strict reference flag从他们的名字,但我不明白是什么base value.该文件说,base value要么是undefined,String,Boolean,Number和Object,但它并没有说这是如何设置和它是什么.我猜这是类似于上下文对象的东西.谁能解释一下?
Microsoft允许使用以下语法在JScript中设置环境变量:
var sh = WScript.CreateObject("Wscript.Shell");
var env = sh.Environment("PROCESS");
env("TEST") = "testvalue";
Run Code Online (Sandbox Code Playgroud)
我想知道第三行 - 和我一起使用JSLint,它将这行称为"Bad Assigment".
但它的确有效!
是否ECMAscript标准兼容将函数的返回值作为左值(如此处)?
如果是:如何编写这样的函数?
我正在调查我的范围之外的一些代码,这些代码是用我以前从未见过的风格编写的.我试图了解以下属性包的内部工作原理:
二传手:
props.Property(name) = val;
Run Code Online (Sandbox Code Playgroud)
消气:
val = props.Property(name);
Run Code Online (Sandbox Code Playgroud)
你需要实例化setter以便如上所述运行?
编辑:简化程度较低,此代码在框架内的BrowserWindow上成功运行(类似于手机环境).
var UI =
{
ready: function(oProps)
{
try
{
if (oProps)
{
window.external.Property(UI.FrameWidth) = '1000';
window.external.Property(UI.FrameHeight) = '900';
}
window.external.Ready();
}
catch (e) { }
}
};
Run Code Online (Sandbox Code Playgroud)
提前致谢,