При попытке использовать один из этих литералов как объект, буквальные превращаются в объект (обертка прикладываются к ней) внутренне, так что вы получите доступ к любому методу или свойства вы пытаетесь пользоваться:
var a = /regexp/
a.test(aString);
... по существу такой же, как:
var a = new RegExp("regexp");
a.test(aString);
единственное отличие состоит в том, что без eval()
, единственный способ построить Regex во время выполнения с помощью RegExp()
.
То же самое для строк:
var b = "abc";
b.length;
... так же, как:
var b = new String("abc");
b.length;
Однако typeof "ABC"
не то же самое, как typeof (new String("ABC"))
. Первый возвращает «string», а последний возвращает «объект». (см. комментарии).
Это в значительной степени касается предпочтений и удобочитаемости. Не слишком много программистов выбирают new String("ABC");"
вместо "ABC"
, потому что во время сканирования кода легче распознать "ABC"
. Это по той же причине, почему проще написать "ABC"
: меньше символов. Для Regexes вам снова решать, что использовать.
Лично я использую "ABC"
для строк (меньше символов писать, легче читать, чаще и т.д.)
НИКОГДА не используйте «новую строку». Это не одно и то же. Попробуйте следующее: alert (typeof new String ("")); // «объект»! – InfinitiesLoop
@InfinitiesLoop; Очень интересно, я этого никогда не знал. Благодаря! Я изменю свой пост. –
@InfinitiesLoop. Хорошая точка зрения. –