布尔变量从javascript函数返回为字符串

IT技术 javascript
2021-02-05 11:37:27

为什么当我返回时,我认为是来自 javascript 函数的布尔变量,它在调用函数中被检测为字符串,但是如果我返回一个布尔文字,调用函数将其检测为布尔值?

因此,例如:

$( document ).ready(function(){
    $('#result').text(typeof validate());
    $('#result2').text(typeof validate2());
});

function validate(){
    status = true;
    status = false;
    return status;
}
    
function validate2(){
    return true;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Hello</p>
<div id="result"></div>
<div id="result2"></div>

2个回答

您没有声明status状态变量。

因此,全局一个 ( window.status) 被覆盖。

但是,HTML 5 规范将该属性定义为 DOMString:

interface Window : EventTarget {
  attribute DOMString status;
};

因此,它有一个存储字符串化值的 setter(公开的或内部的)。

要修复它,只需使用varstatement声明您的局部变量

我没有找到你解释的二传手部分,你有链接吗?
2021-03-27 11:37:27
@Nobe4 在 Firefox 上,您可以使用Object.getOwnPropertyDescriptor(window, 'status').set. Chrome 不公开 setter,但该值在存储之前仍然是字符串化的,如 HTML5 中所指定。
2021-03-30 11:37:27

$( document ).ready(function(){
    $('#result').text(typeof validate());
    $('#result2').text(typeof validate2());
});

function validate(){
    var status = true;
    status = false;
    return status;
}
    
function validate2(){
    return true;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<p>Hello</p>
<div id="result"></div>
<div id="result2"></div>

编辑:我正在构建答案,但出了点问题,无论如何,@Oriol 很好地解释了原因:全局 window.status 变量是具有字符串值类型的变量。

由于他的回答不包括更正的代码,因此您的回答也很有帮助。
2021-03-15 11:37:27
您应该解释为什么使用局部变量对此有所不同。
2021-03-23 11:37:27
我发现有一个名为status. 也许这是相关的... > typeof window.status =>string
2021-04-05 11:37:27
@Barmar 真的很抱歉,在构建答案时出了点问题,你认为我应该删除这个答案以离开 Oriol 答案吗?
2021-04-11 11:37:27