ЯШ: Как не допустить двойного объявления?/ определить, если переменная let определена - PullRequest
0 голосов
/ 12 сентября 2018

Если я открою консоль JS и напишу:

let foo;

и после:

let foo = "bar"

консоль покажет мне (правильно)

Uncaught SyntaxError: Identifier 'foo' has already been declared

Сейчас ... Иногда мне нужно внедрить мой код в существующий скрипт, и у меня нет инструмента, чтобы определить, определена ли уже переменная let.

Я пытаюсь использовать этот код, но есть очевидная проблема с областью действия JS илогика .... (закомментируйте код)

let foo; // Gloabl variable empty declare in a code far, far away 

console.log(foo); // undefined

console.log(typeof foo === "undefined"); // test that determinate if condition is true

if(typeof foo === "undefined"){
    let foo = "test";
    console.log(foo); // return "test" this means that foo as a local scope only inside this if... 
}

console.log(foo); // return undefined not test!

// and .. if I try to double declaration... 
 let foo = "bar"; //error!

так ... Как я могу предотвратить двойное объявление "let"?/ Как определить, если let var определена (объявлена?)

PS с "var" все работает нормально !!!

1 Ответ

0 голосов
/ 12 сентября 2018

Вы можете определить область действия для вашего скрипта. У вас все еще есть доступ к внешней переменной внутри этой области.

let toto = 42;
let foo = "bar";
			
console.log(toto);
			
//Some added script
{
    let toto = "hello world !";
    console.log(toto);
    console.log(foo);
}
//back to main script
console.log(toto);

Вы все еще можете программно проверить, существует ли переменная или нет, используя try - catch, но это может быть очень сложно объявить переменную внутри try { } catch { } областей действия

let existingVariable = "I'm alive !";

try
{
    console.log("existingVariable exists and contains : " + existingVariable);
    console.log("UndeclaredVariable exists and contains : " + UndeclaredVariable);
}
catch (ex)
{
    if (ex instanceof ReferenceError)
    {
        console.log("Not good but I caught exception : " + ex);
    }
}
console.log("Looks like my script didn't crash :)");

Если вы не хотите создавать новую область видимости, чтобы убедиться, что ваши переменные еще не существуют в существующем скрипте, хорошо ... префикс их let r1sivar_userinput

...