真真假假当你只学一门语言时好区分,但是等你学几种语言时就会发现居然都各不相同,搞混就很常见啦!
PHP
php7.2中的真假echo []?'true':'false';//false
echo '0'?'true':'false';//false
echo null?'true':'false';//false
echo ''?'true':'false';//false
echo ''==null?'true':'false';//true
当转换为 boolean 时,以下值被认为是 FALSE:布尔值 FALSE 本身
整型值 0(零)
浮点型值 0.0(零)
空字符串,以及字符串 "0"
不包括任何元素的数组
特殊类型 NULL(包括尚未赋值的变量)
从没有任何标记(tags)的 XML 文档生成的 SimpleXML 对象
上面的值互相之间只有''==null 是相等的其它互相不等
JSconsole.log(0 ? 'true' : 'false') // false
console.log('' ? 'true' : 'false') // false
console.log(null ? 'true' : 'false') // false
console.log(undefined ? 'true' : 'false') // false
console.log(NaN ? 'true' : 'false') // false
console.log('0' ? 'true' : 'false') // true
console.log({} ? 'true' : 'false') // true
console.log([] ? 'true' : 'false') // true
Pythonprint('true' if 0 else 'false') # false
print('true' if None else 'false') # false
print('true' if '' else 'false') # false
print('true' if () else 'false') # false
print('true' if [] else 'false') # false
print('true' if {} else 'false') # false
print('true' if '0' else 'false') # true
Luaprint(nil and 'true' or 'false') --false
print('' and 'true' or 'false') --true
print('0' and 'true' or 'false') --true
print(0 and 'true' or 'false') --true
print({} and 'true' or 'false') --true
发现没有,lua中只有nil和false为假其它都是真,这个还挺不错的。
C/C++
这个语言可以说是所有语言的祖先啦,逻辑值比较接近底层,0为假非0为真,别看使用vs编程的时候那么多true false NULL null ,这些都是定义的宏,底层还是定义的0和1,并且c/c++里面全部都是指针,都是用NULL(0)来初始化的。
Java
java中的只有逻辑类型真假两种,如果你直接传非逻辑值给if语句会给你报错,因为java里面全都是对象,并且每种对象都有对应的判断是否为真的方法比较让人省心