La cadena C sigue apuntando a una dirección de memoria donde "Hola \ 0World" se almacena, solo que la mayoría de las funciones de manejo de cadenas consideran 0 fin de cadena. Para algunas funciones, debe pasar un argumento de longitud de cadena, pero la mayoría simplemente lo lee hasta que encuentre el byte nulo. En la memoria, la cadena es en realidad "Hello \ 0World \ 0".
Un motor de JavaScript no puede determinar la longitud de la cadena buscando un byte nulo, ya que en ese caso nunca podría tener un nullbyte dentro de una cadena. Probablemente hay algo acerca de eso en las especificaciones. En su lugar, el motor debe almacenar la longitud de la cadena por separado, y luego leer tantos caracteres de la memoria cada vez que acceda a la cadena.
Y cómo analizar y almacenar correctamente el tamaño de los búferes es algo que los lenguajes de scripts generalmente intentan ocultar al usuario. Esa es la mitad del propósito del scripting, no requerir que el programador se preocupe por agregar 0
a los búferes de caracteres creados y/o almacenar la longitud de cadena por separado para que las funciones de manejo de cadenas no impriman un montón de caracteres aleatorios fuera de su búfer buscando un nullbyte.
Entonces, ¿exactamente cómo se comporta una cadena de JavaScript? No lo sé, probablemente le corresponda al motor describir sus propiedades en profundidad. Siempre que interactúe con el objeto como dice la especificación, puede implementarse de cualquier manera, utilizando estructuras para el búfer y la longitud, usando un carácter de traducción para 0, usando una lista de caracteres vinculada, etc. ...
I piense que Javascript no es C. entonces el byte nulo en una cadena es simplemente un byte nulo en una cadena. –
La mayoría de los lenguajes siguen la tradición de Pascal de representar cadenas como una matriz con una longitud entera (lo que permite el carácter nulo). C es realmente el extraño en este sentido. – hugomg