jsx和js的区别深度对比分析

 更新时间:2026年01月21日 09:32:25   作者:Waiting 同学.  
JS和JSX是不同的文件扩展名,JS是JavaScript文件的常见扩展名,而 JSX是一种特殊的JavaScript语法扩展,这篇文章主要介绍了jsx和js区别深度对比分析的相关资料,需要的朋友可以参考下

概要

在 React 开发的语境下,JS (JavaScript) 和 JSX (JavaScript XML) 既是父子关系,也是“逻辑”与“视图”的分工。

简单来说,JSX 是 JS 的“增强版”。
在 React 开发中,它们的关系就像是“带装备的战士”和“普通平民”。

虽然它们最终都会运行在浏览器中,但它们的编写体验、功能重点以及背后的处理机制完全不同。以下是它们的深度对比分析:

核心定义解释

JS (Standard JavaScript):它是互联网的通用语言。它负责处理数据计算、API 请求、逻辑判断以及所有的“思考”过程。

JSX (JavaScript XML):它是 React 团队开发的语法扩展。它的唯一目的就是:在 JavaScript 中像写 HTML 一样描述 UI 结构。

语法直观感受

如果你想在页面上创建一个简单的“登录按钮”,两者的写法差异如下:

JS 写法(原生 React API)

如果不使用 JSX,你需要通过复杂的函数嵌套来描述 UI,这在嵌套多层时简直是噩梦。

import { createElement } from 'react';

const LoginButton = () => {
  return createElement(
    'button',
    { className: 'btn-primary', onClick: () => console.log('Login!') },
    '点击登录'
  );
};

JSX 写法(现代 React 推荐)

代码非常直观,你一眼就能看出 HTML 的结构。

const LoginButton = () => {
  return (
    <button className="btn-primary" onClick={() => console.log('Login!')}>
      点击登录
    </button>
  );
};

关键差异对照

维度JS (JavaScript)JSX (JavaScript XML)
全称Standard JavaScriptJavaScript XML
浏览器支持原生支持。所有现代浏览器都能直接运行。不支持。必须通过工具(如 Vite, Babel)转换成 JS 才能运行。
主要用途编写逻辑、算法、API 请求、工具函数。编写 UI 组件和页面结构。
代码后缀jsjsx (或者 TypeScript 的 .tsx)
可读性适合纯逻辑,描述 UI 时非常痛苦。像写 HTML 一样自然,所见即所得。

vite中可以直接用JSX
CRA中js可以引入Babel工具包来编译

在 Vite 项目中的“潜规则”

Vite 对后缀名的处理非常严格:

强制性:如果你在.js文件里写了 <div> 这样的标签,Vite 会直接报错。

性能:Vite 在处理 .js 时跳过语法扫描以加快速度;只有遇到 .jsx 时才会调用编译插件进行转换。

混合使用:

业务逻辑(如校验手机号、本地存储封装)放进 .js 文件。

页面组件(包含 HTML 结构的)放进.jsx文件。

如何转化的?

当你保存一个.jsx文件时,Vite 内部的编译器(esbuild)会自动进行以下操作:

输入 (JSX):

<div id="box">Hello</div>

输出 (底层 JS):

// 这才是浏览器真正执行的代码
_jsx("div", { id: "box", children: "Hello" });

JSX 的核心语法规则

要在.jsx文件里写好代码,必须遵守这 4 条“铁律”:

① 只能有一个根元素

如果你想返回多个标签,必须把它们包在一个父元素里,或者使用空标签 <></>

return (
  <>
    <h1>标题</h1>
    <p>内容</p>
  </>
)

② 使用大括号 { } 插入 JS 变量

在大括号里,你可以写任何有返回值的 JS 表达式(变量、函数调用、算术运算)。

const name = 'Gemini';
return <div>你好,{name}!今年是 {new Date().getFullYear()} 年。</div>;

③ 驼峰命名属性

因为 JSX 本质是 JS,而 JS 对关键字(如 class)有限制,所以:

class 写作 className

for 写作 htmlFor

onclick 写作 onClick

④ 必须闭合标签

即使是没有内容的标签,也必须闭合。

<img src="logo.png" />  // ✅ 必须加最后的斜杠
<br />                  // ✅ 必须闭合

JSX 中的条件与列表

在 JSX 里不能直接写 iffor 语句,我们使用 JS 的原生特性替代:

条件渲染:使用三元运算符? :或逻辑与 &&

<div>{isLogin ? <User /> : <Login />}</div>

列表渲染:使用数组的 .map() 方法。

<ul>
  {list.map(item => <li key={item.id}>{item.name}</li>)}
</ul>

小结

处理逻辑、算法、数据格式化,使用 JS。

处理页面、组件、标签布局,使用 JSX。

到此这篇关于jsx和js区别深度对比分析的文章就介绍到这了,更多相关jsx和js区别内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一段利用WSH修改和查看IP配置的代码

    一段利用WSH修改和查看IP配置的代码

    建议增加查询条件,更准确地修改指定网卡。 本人是铁通的线路,这样看比较不错的wsh功能呢,喜欢vbs的朋友,可以用vbs实现,功能更强
    2008-05-05
  • javascript包装对象实例分析

    javascript包装对象实例分析

    这篇文章主要介绍了javascript包装对象,实例分析分析了javascript对象操作的技巧,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-03-03
  • bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法

    bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法

    这篇文章主要介绍了bootstrap 日期控件 datepicker被弹出框dialog覆盖的解决办法 ,本文给大家分享几种解决方法,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-07-07
  • JavaScript布尔运算符原理使用解析

    JavaScript布尔运算符原理使用解析

    这篇文章主要介绍了JavaScript布尔运算符原理使用解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • js实现的订阅发布者模式简单示例

    js实现的订阅发布者模式简单示例

    这篇文章主要介绍了js实现的订阅发布者模式,结合完整示例形式分析了js订阅发布者模式相关实现与使用方法,需要的朋友可以参考下
    2020-03-03
  • echarts几个公司内部数据可视化图表必收藏

    echarts几个公司内部数据可视化图表必收藏

    最近公司有一个需求,要做一个数据可视化的页面,所有的图表都在下面,做这些都是本人自己写的,全部都是真是的项目中的代码,包含有柱状图、折线图、水球图以及散点图,这里直接打出来给大家练手,希望大家多多支持,如果这篇文章对您有用的话必须收藏
    2022-08-08
  • 正则 js分转元带千分符号详解

    正则 js分转元带千分符号详解

    下面小编就为大家带来一篇正则 js分转元带千分符号详解。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-03-03
  • 跟我学习javascript解决异步编程异常方案

    跟我学习javascript解决异步编程异常方案

    跟我学习javascript解决异步编程异常方案,感兴趣的小伙伴们可以参考一下
    2015-11-11
  • js简单的点击返回顶部效果实现方法

    js简单的点击返回顶部效果实现方法

    这篇文章主要介绍了js简单的点击返回顶部效果实现方法,实例分析了实现返回顶部效果的相关要点与实现技巧,需要的朋友可以参考下
    2015-04-04
  • 原生 JS Ajax,GET和POST 请求实例代码

    原生 JS Ajax,GET和POST 请求实例代码

    这篇文章主要介绍了原生 JS Ajax,GET和POST 请求实例代码的相关资料,非常不错具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06

最新评论