Какие символы допустимы для имен переменных JavaScript? - PullRequest
516 голосов
/ 02 ноября 2009

Какие символы можно использовать для именования переменной JavaScript?

Я хочу создать небольшую «библиотеку расширений» для моих не-JavaScript пользователей здесь, на работе (которые кажутся брезгливыми, когда дело доходит до языка). Мне нравится, что jQuery и Prototype используют знак доллара $, и, поскольку я использую jQuery, я ищу другой приятный односимвольный символ для использования.

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

Ответы [ 14 ]

1 голос
/ 25 июля 2015

Я взял идею Анаса Накавы и улучшил ее. Прежде всего, нет никаких причин фактически запускать объявленную функцию. Мы хотим знать, правильно ли он анализирует, а не работает ли код. Во-вторых, для нашей цели буквальный объект является лучшим контекстом, чем var XXX, так как из него труднее вырваться.

    function isValidVarName( name ) {
    try {
        return name.indexOf('}') === -1 && eval('(function() { a = {' + name + ':1}; a.' + name + '; var ' + name + '; }); true');
    } catch( e ) {
        return false;
    }
    return true;
}

// so we can see the test code
var _eval = eval;
window.eval = function(s) {
    console.log(s);
    return _eval(s);
}

console.log(isValidVarName('name'));
console.log(isValidVarName('$name'));
console.log(isValidVarName('not a name'));
console.log(isValidVarName('a:2,b'));
console.log(isValidVarName('"a string"'));

console.log(isValidVarName('xss = alert("I\'m in your vars executin mah scrip\'s");;;;;'));
console.log(isValidVarName('_;;;'));
console.log(isValidVarName('_=location="#!?"'));

console.log(isValidVarName('ᾩ'));
console.log(isValidVarName('ĦĔĽĻŎ'));
console.log(isValidVarName('〱〱〱〱'));
console.log(isValidVarName('जावास्क्रिप्ट'));
console.log(isValidVarName('KingGeorgeⅦ'));
console.log(isValidVarName('}; }); alert("I\'m in your vars executin\' mah scripts"); true; // yeah, super valid'));
console.log(isValidVarName('if'));
1 голос
/ 14 февраля 2013

Вот одно быстрое предложение для создания имен переменных. Если вы хотите, чтобы переменная не конфликтовала при использовании в FireFox, не используйте имя переменной " _content ", так как это имя переменной уже используется браузером. Я нашел это нелегко, и мне пришлось поменять все места, где я использовал переменную "_content" в большом приложении JavaScript.

0 голосов
/ 08 января 2019

Таким образом, вы можете просто исключить символы, которые вы не хотите использовать.

export const validateUserName = name => {
  const re = /[\d+~!@#$%^&*()_|=?;:",.<>{}\]\\/]/gi;
  return Boolean(name && !re.test(name);
};

https://regex101.com/r/xPYcyL/1/

0 голосов
/ 25 июня 2018

Написал рабочую область сбоя , которая перебирает все кодовые точки и выдает символ, если eval('var ' + String.fromCodePoint(#) + ' = 1') работает.

Он просто продолжает идти, идти и идти ....

...