无法将值分配给未定义的变量

时间:2018-08-06 09:48:02

标签: javascript node.js

我从请求中获取参数。有时设置了“数字”,有时没有设置。如果不是,我想将其设置为1,但不起作用

        var nombre = parameter.number;
        console.log("Nombre : " + nombre);
        console.log("Nombre : " + JSON.stringify(nombre));
        if(nombre==undefined || nombre ==null || JSON.stringify(nombre)=="")
            nombre=1;
        console.log(nombre);

这就是我在控制台中看到的内容:

  • 2018-08-06T09:42:42.884852 + 00:00 app [web.1]:Nombre:
  • 2018-08-06T09:42:42.884941 + 00:00 app [web.1]:Nombre:“”
  • 2018-08-06T09:42:42.885026 + 00:00 app [web.1]:未定义

3 个答案:

答案 0 :(得分:2)

只需使用if(!nombre)作为条件。它适用于您要比较的对象:

//for undefined
var nombre = undefined;
if(!nombre)
    nombre=1;
console.log(nombre);
//for null
nombre = null;
if(!nombre)
    nombre=1;
console.log(nombre);
//for ''
nombre = '';
if(!nombre)
    nombre=1;
console.log(nombre);

答案 1 :(得分:2)

如果为true [1] ,则JS中的逻辑或运算符(||)将返回其左侧的值,否则返回右侧的值。

所以

 var nombre = parameter.number || 1;

只要nombre不被视为真,将为parameter.number赋予值1。

如果您需要专门检查undefined,则需要显式检查undefined(但实际上,很少有想对null进行区别对待的情况。)

 var nombre = parameter.number !== undefined ? parameter.number : 1;

[1] “ Truthy”:JS需要布尔值时将其视为true的值。例如。 "0"(非空字符串)被视为true。

答案 2 :(得分:0)

  JSON.stringify(nombre) == ""

这种比较是行不通的。如您在控制台中所见,nombre实际上被字符串化为'“”'(包含两个“”的字符串),因此您的比较将失败,因为该字符串不为空(“”)。因此,您实际上想要做

 nombre === ""