2010-09-20 3 views
3

Интересно, когда использовать литералы и когда использовать объекты для создания значений типа данных.Литералы и объекты - Когда использовать что?

Например.

Когда я использую эти:

/regexp/ 
"string" 

и когда они:

new RegExp("regexp") 
new String("string") 

Будет ли это дать мне те же методы и свойства?

ответ

1

При попытке использовать один из этих литералов как объект, буквальные превращаются в объект (обертка прикладываются к ней) внутренне, так что вы получите доступ к любому методу или свойства вы пытаетесь пользоваться:

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" для строк (меньше символов писать, легче читать, чаще и т.д.)

+4

НИКОГДА не используйте «новую строку». Это не одно и то же. Попробуйте следующее: alert (typeof new String ("")); // «объект»! – InfinitiesLoop

+0

@InfinitiesLoop; Очень интересно, я этого никогда не знал. Благодаря! Я изменю свой пост. –

+0

@InfinitiesLoop. Хорошая точка зрения. –

3
new RegExp()

может быть полезно, если вы хотите, чтобы сцепить значение, хранящееся в переменной.

var x = "exp"; 
var regex = new RegExp("reg" + x); 

Я не знаю ни одной причины, чтобы не использовать струнные литералы.

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

var arr = new Array(3); // creates an Array with an initial length of 3 

var arr = new Array("3"); // creates an Array with an initial length of 
          // 1 item that has the value "3" 

В целом, я думаю, вы были бы в безопасности, придерживаясь литералов.

Смежные вопросы