/ / Може ли някой да обясни тази грешка: изразът на израз не е присвояване или повикване - node.js, socket.io

Може ли някой да обясни тази грешка: израз изявление не е присвояване или повикване - node.js, socket.io

Имам тези два блока код.

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. Може ли някой да обясни защо това се случва? Благодаря предварително.

Отговори:

3 за отговор № 1

Вашият първи блок код е определяне на функцияблок. Вашият втори блок код определя дефиниция на обект. Разрешен е различен синтаксис за всеки и трябва да използвате подходящия синтаксис, за да съответствате на контекста.

Вашият първи блок код е просто изпълнение на серия от оператори във функционален блок. Най- { в края на този ред:

socket.on("chatMessage", function(message) {

определя началото на функционален блок, По този начин Javascript търси изявления, които са законни в този контекст. Всеки ред код трябва да има правно изявление на Javascript. И,

message.username : socket.request.user.username;

не е правно изявление в този контекст. Ако се опитвате да зададете стойност на message.username, тогава валидният синтаксис за това ще бъде:

message.username = socket.request.user.username;

Във втория си блок вие сте в средата на определение на обект. Най- { в края на този ред:

io.emit("chatMessage", {

стартира дефиниция на обект, Като такъв, законният синтаксис за дефиниране на свойство на този обект изглежда така:

username: socket.request.user.username,

И така, тук има два ключа:

  1. Разпознаване, когато a { означава началото на функционален блок спрямо началото на дефиницията на обект. Първият ви код код стартира функционално тяло, вторият стартира дефиниция на обект.

  2. Познаването на разликата между синтаксиса, разрешен във функционален блок и синтаксиса, разрешен в дефиницията на обект.


0 за отговор № 2

Това е добре:

message.type = "message";

Това е добре:

message.created = Date.now();

Това не е:

message.username : socket.request.user.username;

Трябва да бъде:

message.username = socket.request.user.username;

Въпросът ви не е ясен - получавате ли предупреждението, когато смените : да се = или преди да го промените. Не казахте кой ред причинява грешката, предположих, че е този с : вместо =.

Сигурни ли сте, че не използвате TypeScript, който би могъл да интерпретира колоните по различен начин?