JavaScript[容易忽视的错误]:当续行遇到换行,换行符丢失

JavaScript[容易忽视的错误]:当续行遇到换行,换行符丢失1、引言在JavaScript中,当定义一个大的字符串,特别是有换行情况时,为了看起来整齐、易读,一般使用续行符,例如: varscript=”varchart=anychart.pieChart([\[‘Chocolatepaste’,5],\[‘Whitehoney’,2],\

大家好,又见面了,我是你们的朋友全栈君。

1、引言

JavaScript中,当定义一个大的字符串,特别是有换行情况时,为了看起来整齐、易读,一般使用续行符,例如:

	var script = "var chart = anychart.pieChart([\
                ['Chocolate paste', 5],\
                ['White honey', 2],\
                ['Strawberry jam', 2],\
                ['Сondensed milk', 1]\
            ]);\
			//chart.bounds(0, 0, 100%,100%);\
			var stage = anychart.graphics.create('container', 600, 400);\
            stage.container('container');\
            chart.container(stage).draw();\
       	";

2、问题

如果我们直接拿这段代码去执行,就会发现结果和最初的预想大相径庭,为什么呢?

3、问题分析

因为,作为脚本,使用续行符时,只是保证字符串的连续性和合法(说明这时一个完整的串),但不会将换行符也包含在字符串中。也就是说,上面的代码中,script串将不会包含换行符。这是一个很严重的问题,如果串为脚本代码,且含有行注释符(”//“),则会改变了原有的逻辑,行注释符后面的代码将都被注释掉,不会被执行。

举个例子,下面这个例子通过将脚本代码编码,然后发送到后台执行(如在Node.js中执行),这里为了演示方便,只是简单的遍解码:

<textarea id="textarea1" rows="15" cols="53"></textarea>

<script lang="javascript">
	var script = "var chart = anychart.pieChart([\
                ['Chocolate paste', 5],\
                ['White honey', 2],\
                ['Strawberry jam', 2],\
                ['Сondensed milk', 1]\
            ]);\
			//chart.bounds(0, 0, 100%,100%);\
			var stage = anychart.graphics.create('container', 600, 400);\
            stage.container('container');\
            chart.container(stage).draw();\
       	";
  	var  script_out = encodeURIComponent( script);
  	var textarea1 = document.getElementById('textarea1');
  	textarea1.value = decodeURIComponent(script_out);
	
</script>

运行结果

JavaScript[容易忽视的错误]:当续行遇到换行,换行符丢失

可以看到字符串script中的换行符丢失,代码乱成一团,特别是

//chart.bounds(0, 0, 100%,100%);

这一行和后面的行连成了一体,假设执行这段代码,这其后面的代码均不会被执行。

4、解决办法

在有行注释的代码后加上换行符\n,避免后面的代码被注释掉,或者使用范围注释符(/* */)对代码进行注释。

JavaScript[容易忽视的错误]:当续行遇到换行,换行符丢失

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/145007.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 360手机卫士—扫描杀雷达效果[通俗易懂]

    360手机卫士—扫描杀雷达效果

  • python 股票数据接口(深市股票什么开头)

    根据上交所2017年5月公告的文件显示,拿到L1普通行情数据授权的有112家公司,L2授权的有25家,我这里只贴出L2数据的厂家,如果想看L1的授权公司或者深交所的授权情况可以自己去查,太多了就不贴了。1.上海大智慧股份有限公司2.深圳巨灵信息技术有限公司3.浙江核新同花顺网络信息股份有限公司4.北京指南针科技发展股份有限公司5.鼎信汇金(北京)投资管理有限公司6.上海乾隆高科技有限公…

  • python保留小数位的两种方法总结[通俗易懂]

    python保留小数位的两种方法总结[通俗易懂]题目背景:方法一:format函数format有不同用法,代码如下,前者使用了占位符{},使用占位符可以同时输出多个,后者一次只能输出一个importmathres=math.sqrt(a**2+b**2)#使用占位符print(‘{:.3f}’.format(res))#可以同时输出多个print(‘{:.3f}\n{:.2f}’.format(res,res))#不使用占位符只能输出一个print(format(res,’.3f’))运行结果:方法二:’%

  • java+毕业设计+进销存管理系统+源码+论文.rar

    java+毕业设计+进销存管理系统+源码+论文.rar【摘要】进销存管理系统是一个基于Internet的应用系统,它是一个面对当前的进销存管理工作基本还处于手工和半信息自动化处理状态而应运而生的一个基于Internet的一个完全信息自动化的系统,整个系统从符合操作简便、界面友好、灵活、实用、安全的要求出发,完成进货、销售、库存管理的全过程。企业单位只需具备访问Internet的条件即可在系统发布的站点上进行进销存的管理。在图型化的人机界面中完成日常的进销存管理工作.一方面摆脱了时间和空间的限制,另一方面有效的解决的数据共享的问题。经过实际使用证明,本文所

  • Java继承

    Java继承一:继承的概述1.继承的定义继承:就是子类继承父类的属性和行为,使得子类对象具有与父类相同的属性、相同的行为。子类可以直接访问父类中的非私有的属性和行为。–注:父类又称为超类或者基类。子类又称为派生类!2.继承的格式通过 extends 关键字,可以声明一个子类继承另外一个父类,定义格式如下:class父类{…}class子类extends父类{…}二、关于继承之后的成员变量1.当成员变量不重名如果子类父类中出现不重名的成员变量,这时的访问是没有影

  • rtsp视频流下载_rtmp网页视频播放器

    rtsp视频流下载_rtmp网页视频播放器在线视频流地址:rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov模拟器显示界面:学好一门语言,动手去练,半天上手,一星期炉火纯青。——专攻无人车的学长

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号