const r = String.raw; const test_module = require(r`e:\DOC\prg\js\node\-lib\test.js`);
const r = String.raw; const Winreg = require('winreg'); const regKey = new Winreg({ hive: Winreg.HKCU, key: r`\Software\MPC-HC\MPC-HC\Settings` });
String.raw
produces a string without interpreting shielded literals, at the stage of parsing the code, the analyzer still requires that the literals conform to the rules. This implies non-obvious limitations for the mentioned applications. x
or u
characters without corresponding hex sequences cannot follow.Uncaught SyntaxError: Invalid hexadecimal escape sequence
error Uncaught SyntaxError: Invalid hexadecimal escape sequence
: console.log(String.raw`:\x.js`);
Uncaught SyntaxError: Invalid Unicode escape sequence
error Uncaught SyntaxError: Invalid Unicode escape sequence
: console.log(String.raw`:\u.js`);
console.log(String.raw`\x61`); //\x61 console.log(String.raw`\u0061`); //\u0061
console.log(String.raw`:\\x.js`); // :\\x.js console.log(String.raw`:\\x78.js`); // :\\x78.js console.log(String.raw`:\${'x'}.js`); // :\${'x'}.js console.log(String.raw`:\\${'x'}.js`); // :\\x.js console.log(String.raw`:\\u.js`); // :\\u.js console.log(String.raw`:\\x75.js`); // :\\x75.js console.log(String.raw`:\${'u'}.js`); // :\${'u'}.js console.log(String.raw`:\\${'u'}.js`); // :\\u.js
console.log(String.raw`:${'\\'}x.js`); // :\x.js console.log(String.raw`:${'\\'}u.js`); // :\u.js
console.log(String.raw`:\ab\0 cd`); console.log(String.raw`:\ab\' cd`); console.log(String.raw`:\ab\" cd`); console.log(String.raw`:\ab\\ cd`); console.log(String.raw`:\ab\n cd`); console.log(String.raw`:\ab\r cd`); console.log(String.raw`:\ab\v cd`); console.log(String.raw`:\ab\t cd`); console.log(String.raw`:\ab\b cd`); console.log(String.raw`:\ab\f cd`);
`
.Uncaught SyntaxError: missing ) after argument list
: console.log(String.raw`:\John`s.js`);
console.log(String.raw`:\John\`s.js`); // :\John\`s.js console.log(String.raw`:\John\x60s.js`); // :\John\x60s.js
console.log(String.raw`:\John${'`'}s.js`); // :\John`s.js
Uncaught SyntaxError: Unterminated template literal
: console.log(String.raw`:\`);
console.log(String.raw`:\\`); // :\\ console.log(String.raw`:\x5c`); // :\x5c
console.log(String.raw`:${'\\'}`); // :\
String.raw
, come across other unexpected restrictions, or come up with elegant ways to circumvent them, please share.Source: https://habr.com/ru/post/300846/
All Articles