Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/445.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何检查三元运算符中未定义的变量?_Javascript_Typescript_Ecmascript 6 - Fatal编程技术网

Javascript 如何检查三元运算符中未定义的变量?

Javascript 如何检查三元运算符中未定义的变量?,javascript,typescript,ecmascript-6,Javascript,Typescript,Ecmascript 6,我对三元操作有问题: let a = undefined ? "Defined!" : "Definitely Undefined", b = abc ? "Defined!" : "Definitely Undefined", // ReferenceError c = (abc !== undefined) ? "Defined!" : "Definitely Undefined", // ReferenceError d = (typeof abc !== "und

我对三元操作有问题:

let a = undefined ? "Defined!" : "Definitely Undefined",
    b = abc ? "Defined!" : "Definitely Undefined", // ReferenceError
    c = (abc !== undefined) ? "Defined!" : "Definitely Undefined", // ReferenceError
    d = (typeof abc !== "undefined") ? "Defined!" : "Definitely Undefined"

// results: a = d = "Definitely Undefined", 
// while b and c throw ReferenceError when abc is undefined
在访问abc属性之前,检查abc是否
未定义
,以及在
未定义
时分配空白对象
{}
的最佳捷径是什么

let a = [[best way to check abc]] ? {[abc.label1]: 2, [abc.label2]: 1} : {}
PS:我目前正在使用
(abc的类型!=“未定义”)
代替
[[检查abc的最佳方法]]

当abc未定义时,b和c抛出ReferenceError

因此,
abc
不仅仅是未定义的,它是未声明的。这有很大的区别

如果需要处理未声明的
abc
,唯一安全的方法是使用
typeof

typeof abc === "undefined"
如果
abc
是未声明的标识符,则这将是正确的,没有错误。如果声明了
abc
,并且包含值
undefined
,则也是如此

在访问其属性之前,检查
abc
是否未定义以及在未定义时分配空白对象
{}
的最佳快捷方法是什么

可能使用
var
来确保声明:

var abc = abc || {};
重复的
var
声明不是错误(重复的
let
声明是错误)。因此,在上面,如果
abc
是未声明的,它将使用初始值
undefined
声明,我们将其赋值为
{}
。如果它被声明,如果它是falsy,我们将其值替换为
{}
但是,如果它可以或不可以用
let
const
声明,那么上面的语句也将抛出一个错误

因此,为了处理可能会或可能不会使用
let
const
声明的情况,我们需要一个完全不同的变量:

let ourabc = typeof abc === "undefined" || !abc ? {} : abc;
如果
abc
未声明或包含错误值,则将
ourabc
设置为
{}
。由于所有非空的对象引用都是真实的,并且您已经说过要访问对象属性,所以这可能是最短的方法

在访问abc的属性之前,检查abc是否未定义以及在未定义的情况下分配空白对象{}的最佳快捷方法是什么

你是这么说的

我目前正在使用(abc的类型!=“未定义”)

看起来您已定义abc,且值为
未定义

你可以试试看

var a = abc || {};
console.log(a);

这样可以检查三元运算符中未定义的变量。

为什么有未声明的变量?或者你只需要检查
未定义的
?确切地说,在我的情况下,我希望有人能为我提供该变量:准确地说,我正在开发一个通用代码,让我们假设abc可能是,也可能不是defined@KiranShakya在这种情况下,您的代码
typeofabc!==“未定义”
是否也会失败?因为没有定义abc?没有!为了澄清一点,我使用这个部分作为三元运算的条件,如你在第4行中所看到的。谢谢你提到我的拼写错误,所以在这里使用typeof只是最好的选择?@KiranShakya:(不用担心,“三元”是一个词,而不是这个词。:-))
typeof
是检查标识符是否未声明而不会引发错误的唯一安全方法。不过,引用错误是可捕获的,因此从技术上讲,您也可以使用
try
/
catch
,但如果这不是一种例外情况(
abc
未声明),那么它会更详细,效率更低let a=typeof abc==“object”?abc:{}。从技术上讲,它比较短且正确:)
   state = (typeof state !== "undefined") ? state : '';