javascript - 你可以在使用条件时不使用函数的 ( ) 吗?
问题描述
抱歉,如果我的英语打扰了您,但我刚刚意识到您在使用条件时不需要将 ( ) 与函数一起使用 - 至少三元运算符是这种情况。
这是我的代码:
let mark = {
fullName: 'Mark Wough',
mass: 100,
height: 1.8,
calcBMI: function()
return this.mass / (this.height * this.height;)
}
};
let john = {
fullName: 'John Smith',
mass: 90,
height: 1.5,
calcBMI: function()
return this.mass / (this.height * this.height;)
}
};
console.log(mark.calcBMI(, john.calcBMI());)
mark.calcBMI>john.calcBMI? console.log('Mark has higher BMI'): console.log('John has higher BMI');)
请注意,我正在做 mark.calcBMI 而不是 mark.calcBMI() 并且两者似乎都在工作!
任何人都可以解释一下这是否正是它的方式,或者我错过了什么,如果它是正确的,你不需要在使用条件的函数中使用 (),这是一个好习惯,不要仅仅因为它而使用它们可选的还是我应该使用它们来更安全?
解决方案
在您的代码中mark.calcBMI
,并且john.calcBMI
都是对函数的引用。所以当你执行时:
mark.calcBMI > john.calcBMI
您正在检查一个函数是否大于另一个函数(请注意,这些是函数值,而不是调用这些函数的返回值)。所以上面的内容或多或少类似于写作:
(function() {}) > (function() {})
由于询问一个函数值是否大于另一个函数值是没有意义的,因此 JavaScript 会尝试将两个函数都转换为基元(基元是字符串、数字、布尔值等类型)。由于函数是对象,JavaScript 将调用这.toString()
两个函数的方法,这会将函数对象转换为原始字符串。JavaScript 为我们进行了这种转换,所以在幕后它被解释为:
"function() {}" > "function() {}"
现在两个函数都是字符串,可以比较它们。由于左侧字符串不大于右侧字符串(它们相等),因此您会得到false
结果。相同的想法适用于calcBMI
john 和 mark 的函数。由于它们的.toString()
值都相同,因此在比较这两个函数时会得到错误的结果。
这意味着( )
在调用函数1时需要使用括号,否则:
mark.calcBMI > john.calcBMI
... 将始终评估为false
,因为两个calcBMI
toString 方法都返回相同的字符串。
请参阅下面的示例以进一步了解:
const ex1 = (function() {}) > (function() {});
console.log("ex1", ex1);
const ex2 = (function(a) {}) > (function(b) {});
console.log("ex2", ex2);
const ex3 = (function(b) {}) > (function(a) {});
// "function(b) {}" > "function(a) {}", code unit of "b" larger is than the code unit of "a" so the result is `true`
console.log("ex3", ex3);
1. 例外情况是您的方法是吸气剂
推荐阅读
- java - 如何替换矩阵内的元素?
- javascript - 我将如何在我的 Discord.js 机器人中实施许可证密钥?
- docusignapi - DocuSign 刷新令牌过期时返回的错误是什么?
- python - 当 slot 函数具有默认参数=None 时,PySide2 的行为与 PySide 不同
- github - 我如何在 github 上回滚,即使只是在本地?
- c# - 为什么我生成的网格有偏移?
- javascript - 如何在 React Native expo 中将捕获的图像保存到文件管理器
- dafny - 将数字转换为字符串
- electron - 如何在没有遥控器的情况下创建关闭、最大化和最小化按钮?
- ansible - Ansible:查找匹配模式在正则表达式中显示错误