JavaScript变量赋值:三元运算符VS object.property | |值
以下变量赋值在性能和可靠性方面有什么区别:JavaScript变量赋值:三元运算符VS object.property | |值,javascript,performance,variable-assignment,Javascript,Performance,Variable Assignment,以下变量赋值在性能和可靠性方面有什么区别: var obj = {name: "Antonia"}; var foo = obj.name ? obj.name : "foo"; var baz = obj.name || "baz"; 由于定义了obj.name,foo和baz都将包含“Antonia” 据我所知,除了null、undefined、0和false之外,obj.name值的代码应该具有相同的行为。如果属性设置为这些值之一,则foo将包含“foo”,baz将被指定为“baz”
var obj = {name: "Antonia"};
var foo = obj.name ? obj.name : "foo";
var baz = obj.name || "baz";
由于定义了obj.name,foo和baz都将包含“Antonia”
据我所知,除了null、undefined、0和false之外,obj.name值的代码应该具有相同的行为。如果属性设置为这些值之一,则foo将包含“foo”,baz将被指定为“baz”
我有什么缺点没有?
你推荐用哪一种
谢谢
PS:fiddle to play aroud你给出的例子虽然笨拙,但却达到了同样的效果。所以是的,在这种情况下它们是等价的
var foo=obj.name?对象名称:“foo”代码>
这很尴尬,因为您正在询问是否有对象.name
,通常回答为true/false。在这里,您使用成员本身或随机字符串回答问题。因此,问题/答案并不一致
var baz=obj.name | |“baz”代码>
我认为这在生产中的应用更广泛,更具声明性。不要问问题,而是说,“用对象名分配baz
,哦,如果它不存在,那么用字符串“baz”分配baz
,我们知道它确实存在。”
您可能需要分析其中的每一个,以回答有关性能的问题。我希望这能澄清你关于最佳实践的问题 你举的例子虽然笨拙,但却达到了同样的效果。所以是的,在这种情况下它们是等价的
var foo=obj.name?对象名称:“foo”代码>
这很尴尬,因为您正在询问是否有对象.name
,通常回答为true/false。在这里,您使用成员本身或随机字符串回答问题。因此,问题/答案并不一致
var baz=obj.name | |“baz”代码>
我认为这在生产中的应用更广泛,更具声明性。不要问问题,而是说,“用对象名分配baz
,哦,如果它不存在,那么用字符串“baz”分配baz
,我们知道它确实存在。”
您可能需要分析其中的每一个,以回答有关性能的问题。我希望这能澄清你关于最佳实践的问题 我认为,在这一点上,这只是个人偏好……我同意@Karl AndréGagnon的观点,or的版本对我来说更清楚,无论如何,你也应该澄清你的问题。听起来你可能在问关于规范用法的问题——在这种情况下,真的没有。在您的代码中,检查未定义变量的代码更清晰:还要注意,在es6中,可以有更好的方法来指定默认变量:。不要忘记,函数也可以有默认值(function(foo=true){}
)。我认为,在这一点上,这只是个人偏好的问题……我同意@Karl AndréGagnon的观点,or版本对我来说更为清晰。你也应该澄清你的问题。听起来你可能在问关于规范用法的问题——在这种情况下,真的没有。在您的代码中,检查未定义变量的代码更清晰:还要注意,在es6中,可以有更好的方法来指定默认变量:。不要忘记函数也可以有默认值(function(foo=true){}
)。