!!obj与JavaScript中!!的作用

论坛 期权论坛 脚本     
匿名技术用户   2021-1-2 03:22   47   0

首先要知道JavaScript的变量类型在一些操作符下会隐式转换的。比如 " ! " 运算符

alert(!true); // 输出false

alert(!100); // 输出false

alert(!'Web前端开发'); // 输出 false

更多详细的隐式类型转换请参考这篇博文: JavaScript隐式类型转换

一个 " ! " 将变量转为一个boolean类型的值,那么两个连续的 " ! "号叠加就会把变量转为它理应代表的布尔值。

以下为"!!"的规则

number类型: 不为0 就,!!num 等于true;

string类型: 不为"" (空字符串),!!str 等于true;

!!null 等于false

!!undefined 等于false

!!{} 等于 true //注意:对象就算为空都会被转为true

!!function(){} 等于 true //注意:这样写function 并不会执行function,所以就算function里面写任何东西都会返回true

可以看到function并没有被执行,并且返回true

举例:

console.log(!!0);         //false
console.log(!!123);       //true   

console.log(!!"some");    //true
console.log(!!"");        //false

console.log(!!undefined)  //false

console.log(!!null)       //false


//////////////////////////////////////

function testInIf(value){
 if(value){
  return true;
 } else {
  return false;
 }
}

//////////////////////以下全部打印true

console.log(!!{});
console.log(!!{k: 'v'});
console.log(testInIf({}))
console.log(testInIf({k: 'v'}))


console.log(!![]);
console.log(!![0,1]);
console.log(testInIf([]))
console.log(testInIf([0,1]))


console.log(!!function(){});
console.log(testInIf(!!function(){}))


console.log(!!function(){
 console.log("被执行");
 return false;
});
//这个函数并没有被执行
//请注意, 双"!"号和单"!"号都不会执行函数,只是将函数转为了函数表达式,想要执行还需要在后面加 ()

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:7942463
帖子:1588486
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP