如何在chessboard.js中用if-else语句判断棋盘是否为初始位置
错误原因说明
- 调用方式错误:chessboard.js 中获取当前棋盘位置不是直接访问
board.position属性,而是需要调用position()方法。你没加括号时拿到的是函数本身,和任何值对比自然都不成立。 - FEN 不完整:默认调用
board.position('fen')返回的是完整 FEN 串,包含回合、王车易位权限、行棋步数等后缀信息,你只写了棋盘位置段,自然匹配不上。 - 对象对比逻辑错误:JS 中对象的
==/===对比的是内存引用地址,哪怕两个对象内容完全一致,只要不是同一个引用就会返回 false,直接写对象相等的判断无效。 start关键字仅用于初始化:你初始化棋盘时传入的'start'是库识别的配置关键字,不会作为position()方法的返回值,直接对比肯定不生效。
另外你第一段代码里还有语法错误:对象定义里多了多余逗号,也缺少闭合括号。
正确实现方案
方案1:FEN 对比(最省事)
如果只需要校验棋盘棋子位置,不用管回合等信息,可以截取 FEN 第一段对比:
const currentFenPart = board.position('fen').split(' ')[0] if (currentFenPart === 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR') { alert('当前棋盘处于初始位置') } else { alert('当前棋盘不处于初始位置') }
如果需要校验完整游戏状态,直接对比完整初始FEN即可:
const currentFen = board.position('fen') if (currentFen === 'rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1') { alert('当前棋盘处于初始位置') } else { alert('当前棋盘不处于初始位置') }
方案2:位置对象对比
如果你偏好直接用对象判断,可以写个简单的深度相等逻辑:
// 定义初始位置对象 const startPos = { a1: "wR", a2: "wP", a7: "bP", a8: "bR", b1: "wN", b2: "wP", b7: "bP", b8: "bN", c1: "wB", c2: "wP", c7: "bP", c8: "bB", d1: "wQ", d2: "wP", d7: "bP", d8: "bQ", e1: "wK", e2: "wP", e7: "bP", e8: "bK", f1: "wB", f2: "wP", f7: "bP", f8: "bB", g1: "wN", g2: "wP", g7: "bP", g8: "bN", h1: "wR", h2: "wP", h7: "bP", h8: "bR" } const currentPos = board.position() // 对比所有键值对+键数量,确认对象内容一致 const isStart = Object.keys(startPos).every(key => currentPos[key] === startPos[key]) && Object.keys(currentPos).length === Object.keys(startPos).length if (isStart) { alert('当前棋盘处于初始位置') } else { alert('当前棋盘不处于初始位置') }
内容的提问来源于stack exchange,提问作者NinjaDoge
相关产品推荐
相关产品推荐

