gpt4 book ai didi

javascript - 对象如何等于空字符串?

转载 作者:行者123 更新时间:2023-11-30 11:41:08 25 4
gpt4 key购买 nike

当我注意到这个有趣的细节时,我正在使用 Google Apps Script API,如以下代码所示

function testEmptyRange() {
var range = SpreadsheetApp.getActive().getSheetByName("Sheet1").getDataRange();
var values = range.getValues();
Logger.log(values.length + " " + values[0].length);
Logger.log((values[0][0] == "") + " " + typeof values[0][0]);
Logger.log((values[0] == "") + " " + typeof values[0]);
Logger.log((values == "") + " " + typeof values);
}

如果 Sheet1 没有任何内容,则 values1-by-1 2D array of Objects ,实际上是一个包含空字符串的单元格。真正让我吃惊的是 both values values[0],它们都是 类型object,也等于空字符串。上述函数产生的日志为

[17-03-05 00:43:46:807 EST] 1 1
[17-03-05 00:43:46:807 EST] true string
[17-03-05 00:43:46:808 EST] true object
[17-03-05 00:43:46:808 EST] true object

我想解释一下为什么会这样。对象如何等于空字符串?我意识到运算符 == 与运算符 === 不同,如果我将前者替换为后者,则日志显示 对于 valuesvalues[0] 都是 false,我想这更符合预期的行为。但这并不能解释为什么或如何在第一种情况下对象可以等于空字符串,我想了解这里发生了什么。

最佳答案

问题是,正如您提到的,== 并不代表最严格的比较。 == 在一次经常失败的尝试中使用其参数的类型强制来为我们的程序员提供更多帮助。

== 的一个参数是字符串类型时,另一个总是在比较两个值之前转换为字符串。因此,对于一个对象,JavaScript 引擎最终会做这样的事情:

  1. object == ""

  2. 字符串(对象)=== ""

  3. object.toString() === ""

因为一个对象可以有任何你给它的toString方法,这个比较的输出可能是true

编辑:查看anied上面的评论并重新阅读您的示例代码,我突然意识到 valuesvalues[0] 实际上是 arrays,它们是对象类型的特例。他们有一个 toString 方法,用逗号将所有数组元素连接在一起,这意味着一个空数组 [] 将被字符串化为 ""

例子:

var object = {
toString: function () { return '' }
}

console.log(typeof object) //=> 'object'
console.log(object == "") //=> true


var array = []

console.log(typeof array) //=> 'object'
console.log(array == "") //=> true


var matrix = [
['']
]

console.log(typeof matrix) //=> 'object'
console.log(matrix == "") //=> true

关于javascript - 对象如何等于空字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42604993/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com