饶恕是真的就是假的
forgiving isTrue isFalse
在javascript中,我们经常看到0和1代表布尔值TRUE和FALSE。
当将javascript与HTML结合使用时,源自HTML元素(例如表单或ELEMENT属性)的值可能具有"类型"转换(例如"1"或"true"),并且可以作为字符串传递给javascript。
此外,我们还可能以字符串形式为TRUE提供不同的值,如小写/大写/驼峰大小写(TRUE/真/真)。
因此,确定真正的 TRUE 可能很棘手。我想知道以下功能是否涵盖了所有基础,或者我是否错过了什么?
function isFalse (val){
// Just use isTrue so we don't have to test against "" and null
return ! isTrue(val);
// This is the actual code needed to test against FALSE, notice the extra "" and NULL checks
/*
if(typeof val == "string"){
return !(val === "0" || val === "" || val.toLowerCase() === "false");
} else if (typeof val == "object" && val !== null) {
return Object.keys(val).length;
}
return !!val;
*/
}
function isTrue(val){
if(typeof val == "string"){
return (val === "1" || val.toLowerCase() === "true");
} else if (typeof val == "object" && val !== null) {
return Object.keys(val).length;
}
return !!val;
}
// An empty var for testing
var emptyvar;
// A list of test values
// [value is t/f, value]
var list = [
[1, 1]
, [1, "1"]
, [1, true]
, [1, "true"]
, [1, "TRUE"]
, [1, "True"]
, [0, 0]
, [0, "0"]
, [0, false]
, [0, "false"]
, [0, "FALSE"]
, [0, "False"]
, [0, NaN]
, [0, undefined]
, [0, emptyvar]
, [0, null]
, [0, ""]
, [0, {}]
, [0, []]
];
console.log("-------------- is true ---------------------");
for(var i=0; i<list.length; i++){
var item = list[i][1];
var tf = isTrue(item);
console.log( "pass : " + (list[i][0] == tf ? 1 : 0) + " - isTrue : " + tf + " : " + (typeof item) + " : " + item );
}
console.log("-------------- is false ---------------------");
for(var i=0; i<list.length; i++){
var item = list[i][1];
var tf = isFalse(item);
console.log( " pass : " + (list[i][0] == tf ? 0 : 1) + " - isFalse : " + tf + " : " + (typeof item) + " : " + item );
}
上面的代码正确通过了测试,但我想知道我是否错过了一些明显的东西?
在javascript中,我们经常看到0和1代表布尔值TRUE和FALSE。
我没有?但是,是的,0
和1
可以与false
和true
互换(只需+
或!!
即可转换)。
当将javascript与HTML结合使用时,源自HTML元素的值(例如表单或ELEMENT属性)可能具有"类型"转换(例如"1"或"true",并且可以作为字符串传递给javascript)。
不,你很少会。标准 HTML 布尔属性应该可以通过具有真实布尔类型的 DOM 属性进行访问。以及非常明确的转换规则。
我想知道以下功能是否涵盖了所有基础,或者我是否错过了什么?
函数永远不会涵盖所有情况。如上所述,无论如何,您几乎不需要这样的转换功能,并且当您这样做时,它适用于非常受限制的域。在这种情况下,请定义您的域中有哪些案例并涵盖它们。
因此,对于您的测试用例 - 域定义 - 您提出的函数显然运行良好。然而,我确实发现该域有点奇怪,我永远不会认为一个对象(即使为空)是伪造的。
- 指令加载真的很长,检查加载时间的方法
- JS,“;对象”;,这个和那个.来自蟒蛇这真的让我很困惑.(双关语)
- 为什么这是真的:parseInt(1111111111111,2)===parseInt(111111111111,2)
- (false==false==true)怎么可能是真的
- 使用js/jQuery检查对象(而不是元素)是否真的存在
- 为什么typeof的数组的数组的未定义值返回为“0”;未定义的“;我的条件不认为是真的
- coffescript/javascript函数数组的行为真的很奇怪
- Passport.js`isAuthenticated()`不一致的行为;当它应该是真的时候是假的
- 真的没有办法在Firefox中自动杀死没有响应的脚本吗
- html() 真的取代了 html 代码吗?
- 有没有办法检测用户是否真的远离计算机
- 饶恕是真的就是假的
- Extjs form.reset() 不作为 trackResetOnLoad 工作是真的
- 在 JavaScript 中真的需要提升以实现相互递归吗?
- 为什么 1.2 == true 返回 false 如果布尔值 (1.2) 实际上是真的
- IE11真的与getNamedItem()JS函数不兼容吗
- blink()方法真的被弃用了吗
- 我真的必须重新加载我的页面两次吗
- 凌驾于违约之上真的有危险吗;控制台'在节点中
- xmlHttp.status==200从来都不是真的