在PHP中你可以做到if(isset($array['foo'])) { ... }.在JavaScript中,您经常使用if(array.foo) { ... }相同的方法,但这不是完全相同的语句.如果array.foo确实存在,条件也将评估为false,但是false或者0(也可能是其他值).
issetJavaScript 中PHP的完美等价物是什么?
从更广泛的意义上讲,JavaScript处理不存在的变量,没有值的变量等的一般完整指南会很方便.
var arr = { foo : 1, bar: { baz : 2 }, bee : 3 }
function getter(variable) {
return arr[variable];
}
Run Code Online (Sandbox Code Playgroud)
如果我想要"foo"vs"bee"我可以做arr[variable]- 这很容易,而且功能就是这样.
但是,如果我想获得arr.bar.bazAKA arr[bar][baz]怎么办?
我可以传递给getter函数,让我这样做,(当然也让我使用相同的函数获得非嵌套属性).
我试过了getter('bar.baz'),getter('[bar][baz]')但那些没用.
我想我可以解析为点或括号(喜欢这里:在JavaScript中,测试性能深深嵌套在对象图?).有更干净的方式吗?(当然除了eval.)
特别是因为我需要在一个循环中为一堆数组元素多次正确地设置深度.
/** Supplant **/
String.prototype.supplant = function(o) {
return this.replace (/{([^{}]*)}/g,
function (a, b) {
var r = o[b];
return typeof r === 'string' || typeof r === 'number' ? r : a;
}
);
};
Run Code Online (Sandbox Code Playgroud)
Crockford毫无疑问是一个JavaScript大师精灵,但是当涉及多个级别的对象时,他的原型缺乏.
我希望此功能涵盖多级对象替换,例如'{post.detailed}'任何人都可以帮我修改替换版本吗?