What does ${} (dollar sign and curly braces) mean in a string in JavaScript?
You're talking about template literals.
They allow for both multiline strings and string interpolation.
Multiline strings:
console.log(`foobar`);// foo// bar
Meaning of Dollar Sign & Curly Braces Containing Javascript Block Outside of HTML Script Tag
It's not supposed to be javascript but a template file. Template file contains static html and very dumb presentation logic, usually in a pseudolanguage as it is in this case. It should not contain any real javascript - as it is said in the book that it's something you shouldn't do.
The book then goes into a refactored version that only has static html and the pseudolanguage statement. See Javascript templating.
The book seems to be aimed at those who are already proficient at javascript and are looking into structuring their js better.
Why dollar sign and brackets inside string do not work? Javascript/npm/react
Use backticks like so:
<img alt='robots' src={`https://robohash.org/${id}?200x200`} />
Is it wrong to use curly braces after the dollar sign inside strings
${...}
is a syntax for another purpose. It is used to indirectly reference variable names. Without string interpolation, literal names in curly braces or brackets are written as string literals, thus enclosed in quotes. However, inside interpolation quotes are not used outside curly braces:
$bar = 'baz';
echo $bar , PHP_EOL;
echo ${'bar'} , PHP_EOL;
$arr = ['a' => 1, 'b' => ['x' => 'The X marks the point.']];
echo $arr['a'] , PHP_EOL;
// interpolation:
echo "$arr[a] / {$arr['a']}" , PHP_EOL;
Instead of literals you can use functions as well:
function foo(){return "bar";}
// Here we use the function return value as variable name.
// We need braces since without them the variable `$foo` would be expected
// to contain a callable
echo ${foo()} , PHP_EOL;
When interpolating, you need to enclose into curly braces only when the expression otherwise would be ambiguous:
echo "$arr[b][x]", PHP_EOL; // "Array[x]"
echo "{$arr['b']['x']}", PHP_EOL; // "The X marks the point."
Now we understand that ${...}
is a simple interpolation "without braces" similar to "$arr[a]"
since the curly braces are just for indirect varable name referencing. We can enclose this into curly braces nevertheless.
Interpolated function call forming the variable name:
echo "${foo()} / {${foo()}}", PHP_EOL;
// "baz / baz" since foo() returns 'bar' and $bar contains 'baz'.
Again, "${bar}"
is equivalent to ${'bar'}
, in curly braces: "{${'bar'}}"
.
As asked in comments,
there is another curly brace syntax to reference array keys.
$someIdentifier{'key'}
This is just an alternative syntax to PHP's common array syntax $array['key']
.
In opposit to the latter, on indirect variable name references the curly braces follow immediately after the $
or the object member operator ->
. To make it even more cryptic we can combine both:
$bar['baz'] = 'array item';
echo ${'ba' . 'r'}{'ba'.'z'};
which is equivalent to echo $bar['baz'];
Really weird in PHP's string interpolation: "${bar}"
is valid and "${'bar'}"
as well but not "$array['key']"
, "$array[key]"
is valid instead, but both, "$array{key}"
and "$array{'key'}"
, do not work at all.
Conclusion
It should be made a habit to use braced interpolation syntax all the time. Braced array key syntax should be avoided at all.
Always use:
"{$varname} {$array['key']} {${funcname().'_array'}['key']}"
See also PHP documentation:
- Complex curly syntax
(to distinguish from)
Variable variables (also known as indirect variable name referencing)
Accessing array elements
Both square brackets and curly braces can be used interchangeably for accessing array elements (e.g. $array[42] and $array{42} will both do the same thing in the example above).
What does ${} (dollar sign and curly braces) mean in a string in JavaScript?
You're talking about template literals.
They allow for both multiline strings and string interpolation.
Multiline strings:
console.log(`foobar`);// foo// bar
Equal sign inside object destructuring curly braces
That means if field
contains a resolve
property, extract it:
const defaultFieldResolver = 'defaultFieldResolver';
const field = { resolve: 'resolve' };
const { resolve = defaultFieldResolver } = field;
console.log(resolve);
Related Topics
Convert Js Object to Form Data
Window.Onunload Is Not Working Properly in Chrome Browser. Can Any One Help Me
Invariant Violation: _Registercomponent(...): Target Container Is Not a Dom Element
How to Upload a File Using Jquery.Ajax and Formdata
How to Pass Parameters in Computed Properties in Vue.Js
How to Get the Global Object in JavaScript
Which Edition of Ecma-262 Does Google Apps Script Support
Getting All Selected Checkboxes in an Array
How to Do a Deep Comparison Between 2 Objects with Lodash
"Var" or No "Var" in JavaScript's "For-In" Loop
Date.Setmonth' Causes the Month to Be Set Too High If 'Date' Is at the End of the Month
How to Break/Exit from a Each() Function in Jquery
Jquery Equivalent of JavaScript's Addeventlistener Method
Difference Between Dom Parentnode and Parentelement
Scriptmanager.Registerstartupscript Code Not Working - Why
How to Set State of Response from Axios in React
How to Replace Selected Text with HTML in a Contenteditable Element