Javascript 左侧表达式无效
我正在试图找出我编写的底部函数无法正常工作的原因。每当我尝试测试它时,就会出现以下错误:uncaughtreferenceerror:后缀操作中的左侧表达式无效。我假设这是因为代码无法识别“x”字符串与变量x相同,一旦它在添加到x的值时被去掉引号。有人能帮我处理一下吗?如果没有,你能建议一些替代方法吗?提前谢谢Javascript 左侧表达式无效,javascript,referenceerror,Javascript,Referenceerror,我正在试图找出我编写的底部函数无法正常工作的原因。每当我尝试测试它时,就会出现以下错误:uncaughtreferenceerror:后缀操作中的左侧表达式无效。我假设这是因为代码无法识别“x”字符串与变量x相同,一旦它在添加到x的值时被去掉引号。有人能帮我处理一下吗?如果没有,你能建议一些替代方法吗?提前谢谢 var grid=[[null,null,null], [null,null,null], [零,零,零]; 函数checkWin(){ VAL=[“x”,“o”]; var x=0;
var grid=[[null,null,null],
[null,null,null],
[零,零,零];
函数checkWin(){
VAL=[“x”,“o”];
var x=0;
VarO=0;
对于(变量k=0;k }
如何将数据放入如下对象中:
var _ = {
x : 0,
o : 0
};
_[value]++;
并按如下方式更改值:
var _ = {
x : 0,
o : 0
};
_[value]++;
我希望这会有所帮助。以下使用对象。测试了不同的网格定义
var grid = [
["o", "x", "x"],
["o", "x", "x"],
["o", "", "o"]];
var grid = [
["o", "x", ""],
["x", "x", "x"],
["o", "o", ""]];
var grid = [
["x", "x", ""],
["o", "x", "o"],
["o", "o", "x"]];
var grid = [
["x", "x", "o"],
["x", "o", "x"],
["o", "x", "x"]];
checkWin(grid)
function checkWin(grid) {
var vals = [{player: "x", value: 0}, {player: "o", value: 0}];
for (var k = 0; k < vals.length; k++) {
for (var i = 0; i < 3; i++) {
// check win by row
vals[k].value = 0;
// check win by col
for (var j = 0; j < 3; j++) {
if (grid[i][j] === vals[k].player) {
vals[k].value++;
}
}
if (vals[k].value === 3) {
alert(vals[k].player + " wins by row " + (i+1));
return vals[k].player;
}
// check win by col
vals[k].value = 0;
for (var j = 0; j < 3; j++) {
// check col
if (grid[j][i] === vals[k].player) {
vals[k].value++;
if (vals[k].value === 3) {
// break if you want to know what column won by
break;
}
}
}
if (vals[k].value === 3) {
alert(vals[k].player + " wins by col " + (i+1));
return vals[k].player;
}
}
}
// check win by diag l to r
for (var k = 0; k < vals.length; k++) {
vals[k].value = 0;
for (var i = 0; i < 3; i++) {
if (grid[i][i] === vals[k].player) {
vals[k].value++;
}
}
if (vals[k].value === 3) {
alert(vals[k].player + " wins by diag left to right!");
return vals[k].player;
}
}
// check win by diag r to l
for (var k = 0; k < vals.length; k++) {
vals[k].value = 0;
for (var i = 0; i < 3; i++) {
if (grid[i][2-i] === vals[k].player) {
vals[k].value++;
}
}
if (vals[k].value === 3) {
alert(vals[k].player + " wins by diag right to left!");
return vals[k].player;
}
}
}
var网格=[
[“o”、“x”、“x”],
[“o”、“x”、“x”],
[“o”、“o”、“o”];
变量网格=[
[“o”、“x”、“x”],
[“x”、“x”、“x”],
[“o”、“o”、“o”];
变量网格=[
[“x”、“x”、“x”],
[“o”、“x”、“o”],
[“o”、“o”、“x”];
变量网格=[
[“x”、“x”、“o”],
[“x”、“o”、“x”],
[“o”、“x”、“x”];
checkWin(网格)
函数checkWin(网格){
var VAL=[{player:“x”,值:0},{player:“o”,值:0}];
对于(变量k=0;k
在表达式(value.replace(/['']+/g',)++;
中,在replace
之后将返回一个字符串。字符串不能递增/递减。使用parseInt()
而不是删除引号。嘿,Tushar,我实际上正在深入研究这一点,看看你是否正确。我的印象是replace(/['“]+/g'”)将删除引号。@mseifert我尝试过parseInt(),但得到的是NaN。根据MDN,parseInt()的返回值是“从给定字符串解析的整数。如果第一个字符无法转换为数字,则返回NaN。”无论如何,谢谢!请从代码中删除多余的空行。@Tushar事实上,不是字符串不能递增,而是表达式不能递增。有几件小事我做了清理-例如,删除x
和y
变量,将VAL[x]的1个引用更改为VAL[k]
,修复了{player:“x”,值:0}
中的对象值,以及另一个修复。