Этот меня сильно ударил. Я не знаю, относится ли это ко всем браузерам (у меня нет другого подходящего браузера для тестирования), но, по крайней мере, Firefox имеет два типа строковых объектов.
Откройте консоль Firebugs и попробуйте следующее :
>>> "a"
"a"
>>> new String("a")
String { 0="a"}
Как вы можете визуально заметить, Firefox по-разному обрабатывает новую строку («a»)
и «a»
. Однако в остальном оба типа строк ведут себя одинаково. Например, есть свидетельства того, что оба используют один и тот же объект-прототип:
>>> String.prototype.log = function() { console.log("Logged string: " + this); }
function()
>>> "hello world".log()
Logged string: hello world
>>> new String("hello world").log()
Logged string: hello world
Очевидно, оба они одинаковы. То есть, пока вы не спросите тип.
>>> typeof("a")
"string"
>>> typeof(new String("a"))
"object"
Мы также можем заметить, что когда this
является строкой, это всегда форма объекта:
>>> var identity = function() { return this }
>>> identity.call("a")
String { 0="a"}
>>> identity.call(new String("a"))
String { 0="a"}
Пройдя немного дальше, мы можем увидеть, что не Строковое представление объекта не поддерживает никаких дополнительных свойств, но строка объекта поддерживает:
>>> var a = "a"
>>> var b = new String("b")
>>> a.bar = 4
4
>>> b.bar = 4
4
>>> a.bar
undefined
>>> b.bar
4
Кроме того, забавный факт! Вы можете превратить строковый объект в строку, не являющуюся объектом, с помощью функции toString ()
:
>>> new String("foo").toString()
"foo"
Никогда не думал, что может быть полезно вызвать String.toString ()
! В любом случае.
Итак, все эти эксперименты вызывают вопрос: почему в JavaScript есть два типа строк?
Комментарии показывают, что это также относится к каждому примитивному типу JavaScript (включая числа и логические символы). различия в реализации и изменение расписания (различается ли оно?) Я запускал strace в двух похожих программах, в одной ...
В чем основное различие между pthread и fork по отношению к linux с точки зрения различия в реализации и изменение расписания (различается ли оно?)
Я запускал strace в двух похожих программах, одна с использованием pthreads, а другая с использованием fork, оба в конце делают системный вызов clone () с разными аргументами, поэтому я предполагаю эти два по существу одинаковы в системе Linux, но с pthreads проще для обработки в коде.
Может кто-нибудь дать подробное объяснение?
РЕДАКТИРОВАТЬ: см. также связанный вопрос