Javascript 空字符串与空字符串,不同的结果-Vue2
Null和空字符串在代码中给出不同的结果:Javascript 空字符串与空字符串,不同的结果-Vue2,javascript,vue.js,Javascript,Vue.js,Null和空字符串在代码中给出不同的结果: <b-button :disabled="phone && phone.length < 9"></b-button> 在这种情况下,phone等于false,因此我的和&phone.length
<b-button :disabled="phone && phone.length < 9"></b-button>
在这种情况下,phone
等于false,因此我的和&phone.length<9
语句不会触发,据我所知
但是如果我设置了电话:'
(空字符串),那么我的电话
设置为true
,并触发下一条语句&&phone.length<9
此条件的目的是在电话号码为空或少于9位时禁用按钮。您可以使用计算属性轻松检查输入:
var-app=新的Vue({
el:“#应用程序”,
数据:{
电话:空,
inputText:null
},
计算:{
isDisabled(){
return(this.phone?this.phone.length<9:true)
}
}
})
电话:{{phone}
isDisabled:{{isDisabled}
问题在于:禁用需要真/假(IMO)。但是,您使用的短路求值通常返回最后一个求值表达式(因为它是&&
运算符)
现在,可以是非布尔值。因此,我认为在您的表达式中,您实际上返回了一个“null”
(字符串),该字符串对于:disabled
,可能是有效的truthy
值。换句话说,等于真
如果将表达式修改为以下条件,则可以获得所需的内容
编辑条件:
!(phone && phone.length && phone.length >=10).
谢谢,问题不在于null
是否与空字符串不同?Alexander,这不是你的问题。如果您计算布尔(“”
和布尔(null)
,您会注意到它们都返回false。@lovrodoe,那么理解电话和&phone.length<9
是我的错吗?如果phone
返回true
,只有这样,和&
之后的语句才会被激发?这是正确的。我在console中进行了测试,似乎”“&&true
和”“&&false
都返回一个空字符串,并且不对第二条语句求值。如果有null,则会有类似的行为,它总是返回null,并且不会对第二条语句求值。这两个都不返回true或false。但在我的例子中,为什么它对空字符串有效呢phone&&phone.length<9
-如果它在第一条语句中返回false
,则我的按钮将永远不会被禁用,但对于空字符串,它将被禁用(返回true)。根据文档:,如果与布尔值一起使用,它们都应该返回true
,以便true
我已经尝试了double!!电话
条件,与我在开始时发布的相同。@AlexanderKim刚刚更新了条件。这应该行得通。针对null
、未定义的、'
和'abc'
(长度==3)进行测试。似乎会归还你需要的东西。如果没有,请告诉我。干杯
!(phone && phone.length && phone.length >=10).