JavaScript[容易忽视的错误]:当续行遇到换行,换行符丢失
来源:互联网 发布:自动生成字幕软件 编辑:程序博客网 时间:2024/06/11 21:49
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>运行结果
可以看到字符串script中的换行符丢失,代码乱成一团,特别是
//chart.bounds(0, 0, 100%,100%);这一行和后面的行连成了一体,假设执行这段代码,这其后面的代码均不会被执行。
4、解决办法
在有行注释的代码后加上换行符\n,避免后面的代码被注释掉,或者使用范围注释符(/* */)对代码进行注释。
0 0
- JavaScript[容易忽视的错误]:当续行遇到换行,换行符丢失
- javascript textarea的换行符
- 当String.Split()方法遇到回车换行
- 网站上传容易忽视的错误
- 使用NSInteger容易忽视的错误
- Javascript 容易忽视的语法点
- javascript 换行符
- javascript替换换行符
- 当git add .遇上换行符问题
- 容易忽视的运算符问题
- JavaScript字符串多行换行
- JavaScript字符串多行换行
- JavaScript中替换换行符
- git使用中遇到的换行符问题总结
- 面试最容易被忽视的12种错误
- 编程中一些容易忽视的小错误
- 开发MT4连接失败最容易忽视的一个错误
- 容易令人忽视的if、else语句逻辑错误
- Gliffy - 一个在线的画UML图,流程图的工具
- java正则表达式
- ABAP中的动态运算函数
- github与bitbuckut的 ssh生成
- 多核程序设计——存储模型
- JavaScript[容易忽视的错误]:当续行遇到换行,换行符丢失
- 如何下载并使用think in java 4th中的源代码
- 深入JVM系列(二)之GC机制、收集器与GC调优
- CSS3 经典教程系列:CSS3 线性渐变(linear-gradient)
- 初学者很实用:struts中action使用session的2种方式
- ZOJ 3824 Fiber-optic Network ~莫比乌斯
- java 正则表达式 验证邮箱
- 悟空学Linux专栏----第49篇
- NSLocale的重要性和用法简介