Ответ 1
используйте typeof "foo" === "string"
вместо instanceof.
В JavaScript я могу объявить строку следующими способами:
var a = "Hello World";
var b = new String("Hello World");
но a не является экземпляром String...
console.log(a instanceof String); //false;
console.log(b instanceof String); //true;
Итак, как вы находите тип или "instanceof
" строковый литерал?
Может ли JavaScript принудительно создать new String()
для каждого строкового литерала?
используйте typeof "foo" === "string"
вместо instanceof.
Используйте typeof
вместо этого и просто сравните полученную строку. Подробнее см. docs.
Нет необходимости писать new String()
для создания новой строки. Когда мы пишем оператор var x = 'test';
, он создает x
как строку из примитивного типа данных. Мы не можем присоединить пользовательские свойства к этому x
, как это делается с литералом объекта. то есть. x.custom = 'abc';
x.custom
даст значение undefined. Таким образом, в соответствии с нашей потребностью нам нужно создать объект. new String()
создаст объект с typeof()
Object, а не string. Мы можем добавить пользовательские свойства к этому объекту.