chess.com控制台运行JS代码报newPieces.sort is not a function错误求解
问题原因
你初始声明时确实将newPieces赋值为数组,但后续执行newPieces = updatePieces();时,document.querySelectorAll()接口返回的是类数组结构NodeList,直接覆盖了原来的空数组值。NodeList原型链上没有内置sort方法,因此调用时会抛出类型错误。
解决方案
只要将updatePieces()返回的NodeList转为真正的数组即可,有两种常用写法:
- 写法1:赋值时直接转换
// 把原来的 newPieces = updatePieces(); 替换为下面任意一行 newPieces = Array.from(updatePieces()); // 或者用扩展运算符写法 newPieces = [...updatePieces()];
- 写法2:调用sort前转换
// 把原来的sort调用行替换为 Array.from(newPieces).sort(function(a,b){return a.classList[2].split('-')[1] - b.classList[2].split('-')[1]});
其他可选优化点
你的代码里还有两处可以调整的逻辑问题:
toUpperCase()和toLowerCase()不会修改原字符串,只会返回新的转换后字符串,需要主动赋值:
if(pieceColor == 'w'){ pieceType = pieceType.toUpperCase(); } else { pieceType = pieceType.toLowerCase(); }
- 代码末尾的
fen变量未完成定义,后续补全逻辑即可。
内容的提问来源于stack exchange,提问作者sss
相关产品推荐
相关产品推荐

