if函数判定不正确?JS中返回false的情况

大家好,我是小梅,公众号:「小梅的前端之路」 原创作者。

作为在前端领域不断探索的一员,在此记录开发中遇到的问题,如果你也遇到了相同的问题,希望本文对你有帮助。


遇到的问题:开发中想根据test对象是否有type属性来进行不同的逻辑的操作,type=0时,原本是想要输出is true的,可实际结果却是输出的is false。百思不得其解,当时真的是没想到这一层,用if进行判断,会对type进行转换。

’’、0、undefined、null、NaN等五种值都会被转换为false,因此实际输出与设想的结果不一致。

const test = {
  type: 0
}
if (test.type) {
  console.log('is true')
} else {
  console.log('is false')
}

这里总结了一下这五种数据转换为false的情况,需要的可以保存一下。除了布尔值false和这五种情况进行if判断,其余的都是转换为true,’ ',[],{},new Boolean(false)等也都是转换成true。

因为{},[]、new Boolean(false)等都属于object类型,object类型(null除外)强制boolean型的结果都是true。
在这里插入图片描述
❤️ 欢迎素质三连[点赞 + 收藏 + 评论]

我是小梅,有兴趣的话可以在微信搜一搜「小梅的前端之路」第一时间接收文章更新通知,一起沟通、学习成长呀。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在象棋判断胜负的方法是判断是否将死对方。在JavaScript可以通过模拟棋局来实现判断将死的功能。以下是一个简单的实现方法: 1. 定义棋盘和棋子的状态,可以使用二维数组来表示。 2. 定义棋子的移动规则,包括将、士、象、车、马、兵等棋子的移动方式。 3. 模拟玩家的落子过程,更新棋盘状态。 4. 判断是否将死对方,即判断对方的将是否被将军,并且对方所有可行的移动方式都无法解决将军的情况。 以下是一个简单的JavaScript函数,可以实现判断将死的功能: ``` function checkmate(board, color) { // 找到对方的将 var king = findKing(board, !color); // 判断是否被将军 if (isChecked(board, king.x, king.y, color)) { // 判断是否可以解将 if (!canEscape(board, king.x, king.y, color)) { return true; // 将死 } } return false; // 没有将死 } // 找到对方的将 function findKing(board, color) { for (var i = 0; i < 10; i++) { for (var j = 0; j < 9; j++) { if (board[i][j] && board[i][j].type === 'king' && board[i][j].color === color) { return {x: i, y: j}; } } } } // 判断是否被将军 function isChecked(board, x, y, color) { for (var i = 0; i < 10; i++) { for (var j = 0; j < 9; j++) { if (board[i][j] && board[i][j].color !== color) { var moves = getMoves(board, i, j); for (var k = 0; k < moves.length; k++) { if (moves[k].x === x && moves[k].y === y) { return true; } } } } } return false; } // 判断是否可以解将 function canEscape(board, x, y, color) { for (var i = x - 1; i <= x + 1; i++) { for (var j = y - 1; j <= y + 1; j++) { if (i >= 0 && i < 10 && j >= 0 && j < 9 && (i !== x || j !== y)) { if (!isChecked(board, i, j, color)) { return true; } } } } return false; } ``` 在判断胜负时,只需要在每一次玩家落子后检查对方是否将死,如果将死则判定玩家胜利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值