Nav*_*zan 10 javascript jsx reactjs
我正试着把头围绕在JSX上.我发现了一个非常奇怪的行为.这是我的代码:
const name = undefined;
const myFunc = () => undefined;
let template = (
<div>
{myFunc()}
{name}
{undefined}
</div>
);
ReactDOM.render(template, document.querySelector("#root"));
Run Code Online (Sandbox Code Playgroud)
输出是一次:undefined
为什么const"name"是唯一解析为字符串的未定义值?这个const和其他两个表达式有什么区别?(与Boolean和null相同.)请在此处查看我的代码:codepen
那是因为JSX它的语法糖
会忽略这些类型(参见DOCS): React.createElement(component, props, ...children)
我刚刚意识到这只发生在像codepen这样的编辑器上,因为它们在全局上下文中运行代码而window.name将始终是一个字符串.
window.name将使用toString方法将所有值转换为其字符串表示形式.
如果您将变量更改为其他内容,请假设name1它的行为符合预期.
const name1 = undefined;
const myFunc = function(){return undefined};
let template = (
<div>
{name1}
{undefined}
{myFunc()}
</div>
);
Run Code Online (Sandbox Code Playgroud)
顺便说一下,stack-snippets表现相同:
console.log('name is ', name);
const name = undefined;
console.log('and now name is ', name);
const name1 = undefined;
const myFunc = function(){return undefined};
let template = (
<div>
{name}
{name1}
{undefined}
{myFunc()}
</div>
);
ReactDOM.render(template, document.querySelector("#root"));Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="root"></div>Run Code Online (Sandbox Code Playgroud)
其他编辑器喜欢codesandbox或jsfiddle将代码包装在一个函数中,因此与之没有冲突window.name.
| 归档时间: |
|
| 查看次数: |
790 次 |
| 最近记录: |