这不是一个“code”的函数! 的函数,而是 Javascript 中 true
的函数。 如果您熟悉铸造, 则将变量强制到特定类型, 那么以下内容应该可以合理地为您弄清楚 。
!
只在布林安操作。 因此, 您将它应用到非布林安的变量在应用 !
之前首先被迫是布林安! 。 要将此与您的例子联系起来 :
Boolean(undefined) == false
未定义在 javascript 中类似空( 存在一些差异, 但却是一个不同的话题) 。 布尔等值应该是 < code> false code > 。 < code> un defed code > 不仅仅是没有价值, 它声明您试图使用的变量甚至不存在 。
Boolean(function(){}) == true
函数是 javascript 中的对象。 即使它是空的, 它仍然有一些功能对象共有的基本属性, 因此它的布尔等值是 < code> true code > 。 它不是空的, 所以它有些东西 。
Boolean({}) == true
和空函数一样, 定义了空对象。 但是,它仍然有一些在 javascript 中的对象共有的属性。 它只是没有自定义的属性 。
Boolean(null) == false
正如我提到的undered
, null
是相似的,但并不完全相同。它表示没有价值。
Boolean(()) // error
()
本身并不真正意味着什么。 您需要他们之间的某种方法才能使语法正确, 这样对您的错误/ 真正的问题没有影响 。 ()
单是一个语法错误。
Boolean("false") == true
“false”
是一个字符串。 仅仅因为它包含字母 f, a, l, s, e 与布尔值 false
不相同。 非空字符串是某种东西, 因而强制使用布尔值 true code> 。 注意字符串是一种特殊对象, 因为空字符串 "
强制使用 , 但它是一个空对象, , 如前所述, 强制使用 true
。
Boolean( 假) : 假 :
这应该很清楚。 false
已经是一个布尔, 所以抛出它不会改变它的值。 它仍然是 false
。
从中,您可以看到对每个案例应用 < code>! 是如何提供你所看到的结果的。
com/2010/10/javascription-coercion-demystificated.html" rel="没有跟随 noreferrer" >pretty good article status on type struction in javascript.
<强 > UPATE: 强 >
关于您的 < code> string 问题。 < code> string 对象与字符串字典( 由引号环绕) 之间有不同之处。 您可以从字符串字典创建 < code> string 对象, 但字典不是自动的对象。 数字在 javastatim 中是相同的。 JUS有一个 < code> number 对象, 但您通常会定义数字字典。 < code> number 的行为与您所看到的 < code> string 相符:
alert( new Number() == 0); //true
alert(!0); //true
alert(! new Number()); //false
然而,正如你在评论中精辟地提到的那样:
alert( new String() === ""); //false
由于类型不同;对象与字面上不同。
一般说来, Boolean( some_object)
将总是评估为 true
,但取决于准确值, Boolean( some_literal)
可能评估为虚假。
< 强 > 增编 < /强 >
仅仅因为我本周早些时候打中了自己的脚,我以为这将是需要添加的有用信息。 在大多数语言中,空阵列 < code> <[]
, 将被迫加入 false
> 。 然而,在 Javascript 中, 阵列是对象, 甚至空阵列也迫使自己加入 true
。 一个需要注意。 当 js 和各种服务器侧边语言之间切换时, 很容易按照 < code> if (! maybe_ sety_ array){...\\\\\\\ / code > 的线条滑落。 因为 < code> maybe_ empty_ rary 将总是强制加入 train
。 相反, 您应该做 < code> (be_ se_ arrayy_ array. lant){/code > 。 如果阵列的阵列的长度为空, 如果阵列为空空, 它的长度是0, 它的长度是安全胁迫, 。