Javascript 区分已声明变量和未声明变量的方法
我有个问题。 我将只声明一个满足条件的变量Javascript 区分已声明变量和未声明变量的方法,javascript,Javascript,我有个问题。 我将只声明一个满足条件的变量 if(//some condition1) var some1=1; else if(//some condition1) var some2=2; 现在 如果满足两个条件,则可以在some3中求和 如果只满足一个条件,我希望在some3 我怎样才能做到这一点 注意:感谢您的回答,但我只想在满足该条件的情况下声明变量。 还有其他解决办法吗 var some3=0; if(//some condition1){ var some1=1; so
if(//some condition1)
var some1=1;
else if(//some condition1)
var some2=2;
现在
如果满足两个条件,则可以在some3中求和代码>
如果只满足一个条件,我希望在some3
我怎样才能做到这一点
注意:感谢您的回答,但我只想在满足该条件的情况下声明变量。
还有其他解决办法吗
var some3=0;
if(//some condition1){
var some1=1;
some3 += some1;
}else if(some condition2){
var some2=2;
some3 += some2;
}
编辑:更好的选择:
而且这两个条件不会同时满足,所以,如果你想,你也可以像下面这样做
var some3=0;
if(some condition1){
some3 += 1;
}
if(some condition2){
some3 += 2;
}
首先将两个变量初始化为0
var some1 = 0, some2 = 0;
if (condition1) {
some1 = 1;
}
if (condition2) {
some2 = 2;
}
var some3 = some1 + some2;
由于您希望同时满足这两个条件并设置这两个变量,因此如果
,则不应使用else。只有两个独立的if
语句。为什么不先声明变量,然后在满足条件时设置它们的值呢
var some1 = 0;
var some2 = 0;
if (//some condition)
{
some1 = 1;
}
if (// some condition)
{
some2 = 2;
}
var some3 = some1 + some2;
声明begin中的所有变量。将它们初始化为0。如果满足条件,则更改变量值。然后,在求和时,任何值加0都保持不变。或者,如果满足条件,则该值不会为0。对象如何:
if(//some condition1) {
var some1 = 1;
} else if(//some condition1) {
var some2 = 2;
}
var some3 = 0;
if(some1 !== undefined) {
some3 += some1;
}
if(some2 !== undefined) {
some3 += some2;
}
var obj = {};
if(//conditon){
obj.some1 = 1;
}
else if(//condition){
obj.some2 = 1;
}
var sum3 = 0;
for(var key in obj){
sum3 += obj[key];
}
首先,不能仅在满足某个条件时才声明变量。JavaScript具有函数作用域,这意味着无论您在代码中的什么位置编写var some1
,它都会被提升到函数作用域的顶部:
function A() {
if (...) {
var a = 1;
}
}
将被解释为:
function A() {
var a;
if (...) {
a = 1;
}
}
话虽如此。我认为要解决您的问题,您只需要使用0初始化变量:
var some1 = 0,
some2 = 0,
some3;
if(//some condition1)
some1 = 1;
else if(//some condition1)
some2 = 2;
some3 = some1 + some2;
编辑
实际上,有一种方法可以仅在满足条件时声明变量:
if (...) {
eval("var x = 1;");
}
但是我真的不认为有必要使用这样的“黑客”,也不建议使用这种方法。如果需要使用这种模型,可以使用第四个变量
var some0 = 0
if(/*some condition1*/) {
var some1=1;
some0 = some1 + some3
}
else if(/*some condition1*/) {
var some2=2;
some0 = some2 + some3
}
some3=some0
状况良好
if(some1 != null && some2 != null )
some3=some1+some2;
else if(some1 != null && some2 == null)
some3=some1;
else if(some1 == null && some2 != null)
some3=some2;
else if(some1 == null && some2 == null)
some3=some3;
然后
那么:
var some3 =
(2 > 4 ? 10:0) +
(5 < 8 ? 20:0) +
(10 == 11 ? 30:0) +
('a' < 'b' ? 40:0) ;
var some3=
(2 > 4 ? 10:0) +
(5 < 8 ? 20:0) +
(10 == 11 ? 30:0) +
(‘a’<‘b’?40:0);
我承认这看起来不太好看。你可以使用
如果(//some condition1)var some1=1
如果(//some condition1)var some2=2
然后尝试像我的
为什么不先声明变量,然后在满足conditions@Loney检查if(var==undefined)条件,然后添加only definedone@captain你的意思是if(typeof var==“未定义”)
?当条件不满足时声明变量有什么害处?请记住,由于Javascript提升变量声明的方式,即使条件不满足,
语句中的声明也会被提升到函数中。@Deepenshu问题说,只有当条件为trueGood逻辑时才应该声明变量,但是您正在声明您的变量。还可以改进格式设置bit@Deepanshu请检查这个问题。它说只在满足那个条件时声明变量,不需要在这里声明some1和some2。你可以直接将它添加到some3中。我认为OP的意思是定义的
和未定义的
,而不是声明的
和未声明的
。具有var-some3代码>我声明了变量,但它仍然未定义。声明变量(即使在if中)将在整个函数范围内局部声明它。对我来说,这似乎是正确的答案。只有一个建议,使用与null
的比较,或者使用typeofsome1===“undefined”
,因为与未定义的
进行比较并不完全安全为什么不完全安全?因为在较旧的环境中,可以覆盖未定义的
的值,并将其更改为true
,这将破坏很多东西。这将帮助人们摆脱过时的东西。(由于抛出异常的开销,异常的使用效率很低,但我只是在其他答案中提供了一个额外的选项。)更多关于在一个示例中尝试捕获的副作用的信息。为了回答这个问题,@jon-j创造了这个,证明了这一点。
var some3 = 0; //Assingning global var.
if(//some condition1)
var some1=1;
else if(//some condition1)
var some2=2;
if(some1 != null && some2 != null )
some3=some1+some2;
else if(some1 != null && some2 == null)
some3=some1;
else if(some1 == null && some2 != null)
some3=some2;
else if(some1 == null && some2 == null)
some3=some3;
alert(some3);
var some3 =
(2 > 4 ? 10:0) +
(5 < 8 ? 20:0) +
(10 == 11 ? 30:0) +
('a' < 'b' ? 40:0) ;
try{
var some3=some1+some2;
}
catch (e){
try{
var some3=some1;
document.getElementById("test").innerHTML= some3;
}catch (e){
try{
var some3=some2 ;
document.getElementById("test").innerHTML= some3;
}
catch (e){
document.getElementById("test").innerHTML="Something went wrong!!!!or no condition satisfied";
}
}
}