如果对象属性不存在,则创建普通变量回退的Javascript
Javascript creating a normal variable fallback if object property does not exist
所以现在我已经掌握了javascript的基础知识,我已经准备好进入使用"style"进行编码的中间艺术。我正在努力编写易于维护的代码。其思想是通过创建回退,即使使用中的某个对象属性不可用,也能使函数工作。问题是,如果我经常访问属性,那么我将不得不创建三元条件,为每个访问的属性创建一个简单的条件。现在你可以看到我只访问object.a
。我当然可以存储所有访问属性:
想法1
var a = (object.hasOwnProperty(a) ? object.a : a)
var b ...
var c ...
想法2:
var a = (object['a'] ? object.a : a)
想法3:
var a = object['a'] ? object.a : a
想法3:
(object.hasOwnProperty(a) ? var a = object.a : var a = 1);
想法4:
Switch statements?
最后:
object = {
// a: 1,
b: 2,
c: 3,
}
// normal vars in case one of the properties do not exist
var a = 1,
b = 2,
c = 3;
function x(){
var a = 1;
object.a * 10
if (object.a == not exist || (object.b == not exist|| (object.c == not exist)
then treat all non existing object properties accessed to as normal variables by doing:
convert object.a --> a
{
三元运算符是一种很好的方法。它允许您评估任何您喜欢的表达式,以确定您的候选值是否合适或是否应该使用回退。
示例。。。
// Use fallback if candidate is not "truthy"
var result = obj.a ? obj.a : "fallback";
// Use fallback if candidate is undefined
var result = obj.a !== undefined ? obj.a : "fallback";
// Use fallback if candidate is not defined on the object (whether or not it exists in the prototype chain)
var result = obj.hasOwnProperty(a) ? obj.a : "fallback";
您需要决定要使用回退值的条件。一旦你决定了,就把它包装成一个函数。或者制作几个使用不同条件的类似函数。
这里有一个函数,它检查候选值是否未定义,并返回一个回退值。
function getOrDefault(candidate, fallback) {
if (typeof candidate === "undefined") {
return fallback;
}
return candidate;
}
// Example 1
var b = "alternate value";
var obj = { foo: "value" };
var result = getOrDefault(obj.a, b);
// result -> "alternate value";
// Example 2
var b = "alternate value";
var obj = { a: false };
var result = getOrDefault(obj.a, b);
// result -> false;
同样值得研究的是lodash的get函数。允许您检查属性(甚至是嵌套较深的属性(的存在,并允许您指定回退。
ES6提供了很好的设施来做您想做的事情。最简单的例子是
var { a = 1, b = 2 } = obj;
这使用具有默认值的析构函数赋值。检索obj
上的属性a
并将其分配给变量a
,但如果不存在,则a
的值为1。
在我对"扩展"或"合并"函数的评论的基础上,让我们看看以下内容(从这里开始(:
var extend = function ( defaults, options ) {
var extended = {};
var prop;
for (prop in defaults) {
if (Object.prototype.hasOwnProperty.call(defaults, prop)) {
extended[prop] = defaults[prop];
}
}
for (prop in options) {
if (Object.prototype.hasOwnProperty.call(options, prop)) {
extended[prop] = options[prop];
}
}
return extended;
};
// Your "fallback" object values
var defaults = {
a: 1,
b: 2
};
// Your target object
var myObject = {
b: 4,
c: 8
};
// one line to override a set of defaults, producing a final object
console.log(extend(defaults, myObject)); // Object { a: 1, b: 4, c: 8 }
相关文章:
- 什么是HTML5画布标记的回退
- 如何在XHTML中添加jQuery CDN回退
- 当CDN加载失败时,为字体添加一个本地CSS回退
- 将Php中的Javascript变量回显到另一个页面
- HTML5 视频的回退图像
- 同时使用回退和 JavaScript.什么是正确的方法
- Javascript “替换”替换回退
- 参数化javascript中异步函数链的变量回调,jQuery
- jQuery CDN超时回退
- 悬停状态指针事件:无Javascript回退
- IE8 内联尝试的 SVG 回退
- 设置计时器以等待为flash回退视频播放器加载swfobject脚本
- 如何为未加载、加载时间过长和被阻止的css文件编写回退
- HTML5视频回退/备份图像不合适..
- IE8 和控制台.log - 如果开发人员控制台未打开,则回退到存根
- 咕噜咕噜浏览器化 - 设置包含,回退路径
- Javascript动画回退
- 显示不受支持的文件格式的<视频>回退消息
- JavaScript变量回退
- 如果对象属性不存在,则创建普通变量回退的Javascript