有人可以解释这个错误:expression式语句不分配或调用
我有这两个代码块。
socket.on('chatMessage', function(message) { message.type = 'message'; message.created = Date.now(); message.username : socket.request.user.username; }); socket.on('disconnect', function() { io.emit('chatMessage', { type: 'status', text: socket.request.user.username + ' left the conversation.', created: Date.now(), username: socket.request.user.username, }); });
如果我改变:
或者=
其他,Webstorm给我错误。 Expression statement is not assignment or call.
有人能解释为什么发生这种情况 提前致谢。
你的第一块代码是定义一个function块。 你的第二块代码是定义一个对象定义。 每种语法都有不同的语法,您必须使用适当的语法来匹配上下文。
你的第一块代码只是在一个function块中执行一系列的语句。 {
在这行的结尾:
socket.on('chatMessage', function(message) {
定义function块的开始 。 因此,Javascript正在寻找在这种情况下合法的声明。 每行代码都需要有一个合法的Javascript语句。 和,
message.username : socket.request.user.username;
在这方面不是一个法律声明。 如果您试图为message.username
赋值,那么有效的语法是:
message.username = socket.request.user.username;
在第二个块中,您处于对象定义的中间。 {
在这行的结尾:
io.emit('chatMessage', {
启动一个对象定义 。 因此,在该对象上定义属性的合法语法如下所示:
username: socket.request.user.username,
所以,这里有两个键:
-
识别何时
{
表示function块的开始与对象定义的开始。 你的第一个代码块启动一个函数体,第二个启动一个对象定义。 -
了解function块中允许的语法与对象定义中允许的语法之间的区别。
还行吧:
message.type = 'message';
还行吧:
message.created = Date.now();
这不是:
message.username : socket.request.user.username;
它应该是:
message.username = socket.request.user.username;
你的问题不清楚 – 当你改变:
=
或改变之前,你会得到警告吗? 你没有说出哪一行会导致错误,我认为这是一个:
而不是=
。
你确定你没有使用TypeScript来解释冒号吗?