What is the JavaScript string newline character?

javascript, newline

Solution

I've just tested a few browsers using this silly bit of JavaScript:

function log_newline(msg, test_value) {
  if (!test_value) { 
    test_value = document.getElementById('test').value;
  }
  console.log(msg + ': ' + (test_value.match(/\r/) ? 'CR' : '')
              + ' ' + (test_value.match(/\n/) ? 'LF' : ''));
}

log_newline('HTML source');
log_newline('JS string', "foo\nbar");
log_newline('JS template literal', `bar
baz`);
<textarea id="test" name="test">

</textarea>

IE8 and Opera 9 on Windows use `\r\n`. All the other browsers I tested (Safari 4 and Firefox 3.5 on Windows, and Firefox 3.0 on Linux) use `\n`. They can all handle `\n` just fine when setting the value, though IE and Opera will convert that back to `\r\n` again internally. There's a SitePoint article with some more details called Line endings in Javascript.

Note also that this is independent of the actual line endings in the HTML file itself (both `\n` and `\r\n` give the same results).

When submitting a form, all browsers canonicalize newlines to `%0D%0A` in URL encoding. To see that, load e.g. `data:text/html,<form><textarea name="foo">foo%0abar</textarea><input type="submit"></form>` and press the submit button. (Some browsers block the load of the submitted page, but you can see the URL-encoded form values in the console.)

I don't think you really need to do much of any determining, though. If you just want to split the text on newlines, you could do something like this:

lines = foo.value.split(/\r\n|\r|\n/g);

Problem

Is `\n` the universal newline character sequence in JavaScript for all platforms? If not, how do I determine the character for the current environment? I'm not asking about the HTML newline element (`<BR/>`). I'm asking about the newline character sequence used within JavaScript strings.

Original source