You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在chessboard.js中用if-else语句判断棋盘是否为初始位置

错误原因说明

  1. 调用方式错误:chessboard.js 中获取当前棋盘位置不是直接访问 board.position 属性,而是需要调用 position() 方法。你没加括号时拿到的是函数本身,和任何值对比自然都不成立。
  2. FEN 不完整:默认调用 board.position('fen') 返回的是完整 FEN 串,包含回合、王车易位权限、行棋步数等后缀信息,你只写了棋盘位置段,自然匹配不上。
  3. 对象对比逻辑错误:JS 中对象的 ==/=== 对比的是内存引用地址,哪怕两个对象内容完全一致,只要不是同一个引用就会返回 false,直接写对象相等的判断无效。
  4. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 18:27:07