值

有时我很想知道javascript解析引擎是如何区分一个变量的值,比如下面这段代码。
var x = 'javascript'; //javascript x = "hello"; // hello x = 555; //555 x = null; //null x = a; //a is not defined x = true; //true
对于数字是直接赋值的,因为它没有多样性,数字就是数字。但是对于值是英文的情况就很难区分了,因为在编程语言中,英文既可能是字符串,也可能是引用的另外一个变量。因此如何区分变量和字符串就显得格外重要,编程语言常常将字符串用引号括起来,从而达到区分变量和字符串的作用。有些语言比如java,它们还区分单引号和双引号,单引号括起来的是一个字符,而双引号括起来的才是字符串。但javascript并不区分字符和字符串,而是把它们都当作字符串,因此在javascript中单引号和双引号并没有什么区别。
虽然通过引号可以用来区分变量和字符串,但值往往也可能是一个关键字,比如上面那段代码我将x赋值为null,那么这些编程语言又是如何区分变量和关键字的呢?
null = 123; console.log(null); //Uncaught ReferenceError: Invalid left-hand side in assignment undefined = 456; console.log(undefined); //undefined
以上我给null和undefined分别赋给了另外一个值,其结果,给null赋值报错了,给undefined赋值虽然没有报错,但也没有成功。也许对于null和undefined来说,它们就是值。而变量则是寻找值。我们说javascript是如何区分变量和关键字,最终或许就变成了javascript是如何区分变量和值的。
分号
在一些JS插件中,经常会看到类似下面这样的一行代码
;(function(){
.........
})();
在代码的最前面有一个分号,那么这个分号是干什么用的呢?
我们知道一个分号代表了一段代码的结束,但问题是javascript允许你不写分号,这样就出现了一个问题,代码的结束与否不是你来决定的而是由程序来决定的,而程序也不是万能的,往往它只是走的某个规则,而如果你写的这段代码和它的规则不符,最终的结果就有些不如人意了。
以下是javascript对省略分号的解析规则
var a = 1 + 2 console.log(a) //3
javascript解析器会将以上代码解析成
var a = 1 + 2; console.log(a); //3
如果javascript不给2后面添加分号将会无法解析下去,也可以这么说,如果遇到无法解析下去则javascript解析器会尝试给其添加一个分号,如果还是解析不了则报错。又比如下面这一段代码
var a = 10; var b = 5; var c = a + b (a + b).toString() // b is not a function
它说b不是一个函数,也就是说以上这段代码很有可能解析成了下面这段代码
var a = 10; var b = 5; var c = a + b(a + b).toString();
它把()当成了函数调用。也可以理解为javascript解析器会尽可能多的去匹配,但也有几个例外,它们是retrun、break、continue,当javascript解析器解析到这几个关键字时,它不会把换行后的内容当成是自身的,而是直接在换行之前添加分号,不妨看看下面这段代码
function test(){
return
123;
}
console.log(test()); //undefined
它并没有返回123,也就是说它直接在retrun后面加了分号。
再回过头来看看,那些插件开发者为什么要在代码第一行添加一个分号?
既然是插件,自然是给别人用的对吧,可关键问题是你也不清楚使用这个插件的人它的代码是如何编写的,这好像挺谬论的,它的代码和我们有什么关系呢。
如果说使用者的代码会影响我们的代码,那么它又是如何影响的呢?比如我们正在编写类似下面这样的一段代码
<script src="test.js"></script> <script src="zmz.js"></script>
第一个脚本是使用者自己写的,第二个脚本是引入的某个插件,那么浏览器又是如何解析这两个脚本的呢?不妨我们来测试一下
test.js
var a a
zmz.js
(1+2)
如果你运行起来会发现并没有报错,也就是说javascript解析器并不会因为前面这个文件没有加分号而和后一个文件中的代码一起解析。
问题倒不在这,而是有可能你刚刚看了一本关于HTTP的书,哇靠,原来把文件合并可以减少请求数,于是乎这两个脚本融为一体了。摇身一变成了下面这样
var a a(1+2)
你说这能不出错吗,如果我们在插件的一开始就加上分号,这种事情就不可能出现。
var a a;(1+2)
因此不要把分号单单认为只是用来结束某段代码,它还可以用来隔离某段代码和别人划清界限。
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持!
# js
# 值
# 分号
# 浅析Javascript的自动分号插入(ASI)机制
# javascript 分号总结及详细介绍
# 如何防止JavaScript自动插入分号
# 浅谈javascript的分号的使用
# JavaScript中的分号插入机制详细介绍
# js中关于一个分号的崩溃示例
# JavaScript 自动分号插入(JavaScript synat:auto semicolon
# JS 分号引起的一段调试问题
# JavaScript的基本类型值-String类型
# JavaScript基本类型值-Number类型
# JavaScript基本类型值-Undefined、Null、Boolean
# 这段
# 又是
# 报错
# 成了
# 编程语言
# 这两个
# 英文
# 但也
# 问题是
# 单引号
# 另外一个
# 双引号
# 可以用来
# 的人
# 的是
# 换行
# 是一个
# 变成了
# 也就是说
# 如果你
相关文章:
深圳网站制作平台,深圳市做网站好的公司有哪些?
如何在建站之星网店版论坛获取技术支持?
极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?
建站之星安装提示数据库无法连接如何解决?
如何构建满足综合性能需求的优质建站方案?
韩国网站服务器搭建指南:VPS选购、域名解析与DNS配置推荐
教学网站制作软件,学习*后期制作的网站有哪些?
建站主机如何安装配置?新手必看操作指南
如何快速搭建自助建站会员专属系统?
网站广告牌制作方法,街上的广告牌,横幅,用PS还是其他软件做的?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】
如何自己制作一个网站链接,如何制作一个企业网站,建设网站的基本步骤有哪些?
深圳企业网站制作设计,在深圳如何网上全流程注册公司?
如何正确下载安装西数主机建站助手?
动图在线制作网站有哪些,滑动动图图集怎么做?
湖南网站制作公司,湖南上善若水科技有限公司做什么的?
建站之星好吗?新手能否轻松上手建站?
百度网页制作网站有哪些,谁能告诉我百度网站是怎么联系?
建站之星如何保障用户数据免受黑客入侵?
商务网站制作工程师,从哪几个方面把握电子商务网站主页和页面的特色设计?
如何快速搭建高效香港服务器网站?
英语简历制作免费网站推荐,如何将简历翻译成英文?
如何选择高性价比服务器搭建个人网站?
专业网站设计制作公司,如何制作一个企业网站,建设网站的基本步骤有哪些?
如何在Golang中使用replace替换模块_指定本地或远程路径
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
深圳防火门网站制作公司,深圳中天明防火门怎么编码?
如何在阿里云完成域名注册与建站?
建站之星如何一键生成手机站?
免费制作海报的网站,哪位做平面的朋友告诉我用什么软件做海报比较好?ps还是cd还是ai这几个软件我都会些我是做网页的?
c# F# 的 MailboxProcessor 和 C# 的 Actor 模型
内网网站制作软件,内网的网站如何发布到外网?
建站之星×万网:智能建站系统+自助建站平台一键生成
怀化网站制作公司,怀化新生儿上户网上办理流程?
广州网站制作的公司,现在专门做网站的公司有没有哪几家是比较好的,性价比高,模板也多的?
详解免费开源的.NET多类型文件解压缩组件SharpZipLib(.NET组件介绍之七)
建站之星后台搭建步骤解析:模板选择与产品管理实操指南
山东云建站价格为何差异显著?
如何用PHP快速搭建高效网站?分步指南
上海网站制作网站建设公司,建筑电工证网上查询系统入口?
威客平台建站流程解析:高效搭建教程与设计优化方案
微网站制作教程,我微信里的网站怎么才能复制到浏览器里?
小程序网站制作需要准备什么资料,如何制作小程序?
家具网站制作软件,家具厂怎么跑业务?
建站之星云端配置指南:模板选择与SEO优化一键生成
可靠的网站设计制作软件,做网站设计需要什么样的电脑配置?
制作网站外包平台,自动化接单网站有哪些?
如何快速上传建站程序避免常见错误?
,怎么在广州志愿者网站注册?
*请认真填写需求信息,我们会在24小时内与您取得联系。