为什么这些手写笔散列的行为不一样?
why don't these stylus hashes behave the same?
在我的 Javascript:
// styl is the stylus compiler instance
styl.define('passedHash', new stylus.nodes.Object({
top: 0,
right: 2,
bottom: 5,
left: 20
}));
在我的 .styl 文件中:
localHash = {
top: 0
right: 2
bottom: 5
left: 20
}
.fooBar
nodeType typeof(localHash)
padding unit(localHash['top'], 'px')
nodeType typeof(passedHash)
padding: unit(passedHash['top'], 'px')
编译输出变为:
.fooBar {
nodeType: 'object';
padding: 0px;
nodeType: 'object';
}
如果我取消注释手写笔中的最后一行,我希望 passedHash
的填充规则与 localHash
完全相同。但是,手写笔崩溃了:
TypeError: expected "unit" to be a unit, but got null:null
为什么?编译器知道它们都是对象……它们对我来说似乎是同一个对象……
好吧,根据 Object
节点 (https://github.com/LearnBoost/stylus/blob/master/lib/nodes/object.js) 的来源,您不能将 JS 对象传递给它的构造函数。所以你的 passedHash
是空的,你得到了那个错误。但是,您可以使用以下代码将真实的 JS 对象强制转换为 Stylus 对象:
styl.define('passedHash', {
top: 0,
right: 2,
bottom: 5,
left: 20
}, true); // <-- true for raw coercion
或更详细的版本:
styl.define('passedHash', stylus.utils.coerceObject({
top: 0,
right: 2,
bottom: 5,
left: 20
}, true));
在我的 Javascript:
// styl is the stylus compiler instance
styl.define('passedHash', new stylus.nodes.Object({
top: 0,
right: 2,
bottom: 5,
left: 20
}));
在我的 .styl 文件中:
localHash = {
top: 0
right: 2
bottom: 5
left: 20
}
.fooBar
nodeType typeof(localHash)
padding unit(localHash['top'], 'px')
nodeType typeof(passedHash)
padding: unit(passedHash['top'], 'px')
编译输出变为:
.fooBar {
nodeType: 'object';
padding: 0px;
nodeType: 'object';
}
如果我取消注释手写笔中的最后一行,我希望 passedHash
的填充规则与 localHash
完全相同。但是,手写笔崩溃了:
TypeError: expected "unit" to be a unit, but got null:null
为什么?编译器知道它们都是对象……它们对我来说似乎是同一个对象……
好吧,根据 Object
节点 (https://github.com/LearnBoost/stylus/blob/master/lib/nodes/object.js) 的来源,您不能将 JS 对象传递给它的构造函数。所以你的 passedHash
是空的,你得到了那个错误。但是,您可以使用以下代码将真实的 JS 对象强制转换为 Stylus 对象:
styl.define('passedHash', {
top: 0,
right: 2,
bottom: 5,
left: 20
}, true); // <-- true for raw coercion
或更详细的版本:
styl.define('passedHash', stylus.utils.coerceObject({
top: 0,
right: 2,
bottom: 5,
left: 20
}, true));