直接使用 & 是没有问题的,但如果使用 && 就会提示错误。

也就是说,本身重载 & 运算符的时候允许返回不同的类型;但如果希望 && 运算符在此重载下也生效,就必须确保 & 的返回类型与参数中的类型相同。

以下代码中,true 表示字符串中包含大写字母,false 表示字符串中不包含大写字母(null 和没有大小写的区域也属于不包含大写字母)。& 运算符仅留下两者共有的字符;| 则取所有字符。

刚刚的测试代码中,我们使用了 truthy 和 falsy 概念,而这是逻辑判断概念:

如果在逻辑判断中,对象与 true 等价,但其数值上并非 true(不等于 true),那么称此对象为 truthy;

如果在逻辑判断中,对象与 false 等价,但其数值上并非 false(不等于 false),那么称此对象为 falsy。