Lua 真假值规则

Alexer 发布于 阅读:19 速查

Lua 里只有两个值为假:false 和 nil。就这两个,其余全算真,包括 0、空字符串 ""、空表 {}、字符串 "false"。别把 PHP、JS 那套搬过来。

条件判断直接写 if x then,不用拿 true 或 false 去比。要区分 false 和 nil,必须显式写 x == nil 或 x == false,因为 if x then 会把这两种情况都当成假。

and 和 or 不返回布尔值,返回的是操作数本身。a and b:a 为假返回 a,否则返回 b。a or b:a 为真返回 a,否则返回 b。not 才永远返回 true 或 false。所以 local name = input or "匿名" 这种默认值写法成立,代价是 input 为 false 时也会被替换掉。

-- 只有 false 和 nil 为假
if 0 then print("0 是真") end        -- 会打印
if "" then print("空串是真") end      -- 会打印
if {} then print("空表是真") end      -- 会打印
if "false" then print("字符串也是真") end -- 会打印

-- and / or 返回操作数本身
print(1 and 2)       -- 2
print(nil and 2)     -- nil
print(1 or 2)        -- 1
print(nil or "默认") -- 默认
print(not 0)         -- false,0 也是真

-- false 和 nil 要分开判断
local ok = false
local v = ok or true          -- 得到 true,false 被当成假换掉了
if ok == false then print("确实是 false") end

语法基础 Lua 脚本基础