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

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,避免后面的代码被注释掉,或者使用范围注释符(/* */)对代码进行注释。

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-10-10 04:14:24

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

jQuery开发中容易忽视的错误

1.引用jQuery库文件的<script>标签,必须放在引用自定义脚本文件的<script>标签之前,否则,就会发生找不到对象:最好在<head>元素中,把引入样式表的<link />放在<script>标签前面:有时候其他的javascript库也会用$符号,为了不冲突,可以使用.noConflict()方法把控制权交给别的库.    <script src="prototype.js" type="tex

《JAVASCRIPT高级程序设计》错误处理与调试

一.错误处理 错误处理在程序设计中的重要性是毋庸置疑的,任何有影响力的web应用程序都需要一套完善的错误处理机制.良好的错误机制可以让用户得到提醒,知道发生了什么事. 1.try-catch语句 try-catch语句是javascript处理异常的一种标准方式,它的结构如下: try{ // 把所有可能出现错误的代码放在try语句中 }catch(err){ // 把用于处理错误的块放在catch语句中 // catch块会接受到一个保存错误信息的对象 // 该对象的message属性是唯一一

JavaScript 被忽视的细节

语句/表达式 换个角度理解语句(statemaents)和表达式(expressions):表达式不会改变程序的运行状态,而语句会.还有一种叫做表达式语句,可以理解为表达式和语句的交集,如({a:1})."use strict;"等,我觉得没必要死扣,意义不大. 字符集 ES3 要求 JS 必须实现 Unicode 2.1 及后续版本,而 ES5 只要求支持 Unicode 3 及后续版本.Unicode 字符 2005 年超过了十万字符,至今仍在不断增修,最新版本是 8.0. 分号

javascript之处理Ajax错误

使用Ajax须留心两类错误.它们的区别源于视角的不同. 第一类错误是从XMLHttpRequest对象的角度看到的问题:某些因素阻止了请求发送到服务器,例如DNS无法解析主机名,连接请求被拒绝,或者URL无效. 第二类错误是从应用程序的角度看到的问题:它们发生于请求成功发送至服务器,服务器接受请求,进行处理并生成响应,但该相应并不指向你期望的内容时.例如:如果你请求的URL不存在,这类问题就会发生. 有三种方式可以处理这些错误,如下代码所示: <!DOCTYPE html> <html

javascript学习笔记 常见错误和调试

常见错误一:未定义的变量 abc=23; var abc=23; 若没有var也可运行,隐式地创建了一个新的全局变量abc,严格定义变量应该使用var关键字. 常见错误二:区分大小写 var myName="Jim"; If (myName=="jim") alert(myName.toUppercase()); 以上代码中有三处错误:Jim和jim的首字母J不一样,关键字if写成了If,toUpperCase()方法中的字母C应该是大写的. 常见错误三:不匹配的大

JavaScript try-catch语句(错误处理)

try { //可能会导致错误的代码 } catch (error) { //在错误发生时怎么处理 } 链接:https://www.cnblogs.com/iceflorence/p/6593139.html 原文地址:https://www.cnblogs.com/wanlibingfeng/p/10815155.html

【C#】C#容易忽视的错误

1.string 拼接站内存,前提是字符串比较多的时候string 字符串类型拼接占内存,解决方法就是用 StringBuilder和String.Format2.不知道内置的验证数据类型的方法. int output = 0; bool IsNumeric = int.TryParse(value , out output); 3.自己利用IDisposable接口手动释放内存.其实不必这样做,.NET本身的(GC)提供了相应的功能.比如 using(SqlConnection c = new

深入理解javascript对象系列第三篇——神秘的属性描述符

× 目录 [1]类型 [2]方法 [3]详述[4]状态 前面的话 对于操作系统中的文件,我们可以驾轻就熟将其设置为只读.隐藏.系统文件或普通文件.于对象来说,属性描述符提供类似的功能,用来描述对象的值.是否可配置.是否可修改以及是否可枚举.本文就来介绍对象中神秘的属性描述符 描述符类型 对象属性描述符的类型分为两种: 数据属性和访问器属性 数据属性 数据属性(data property)包含一个数据值的位置,在这个位置可以读取和写入值.数据属性有4个特性 [1]Configurable(可配置性

Qt错误 —— 无法启动此程序 因为计算机丢失QtCore5.dll 以及 无法定位程序输入点于动态链接库QtCore5.dll

首先,设置计算机的环境变量Path,计算机=>右键属性=>高级设置=>环境变量=>系统变量=>双击Path,在Path后面增加C:\Qt\Qt5.8.0\5.8\mingw53_32\bin. 但是错误依旧. 原来电脑里面装的codeblocks的mingw里面也有Qt库.但是我编译的时候用的是安装的Qt的库,所以造成了找不到动态链接库. 解决方法: 前提:正确配置了qt的环境变量 接着,把qt环境变量尽量放到前面,避免程序误认其他环境变量中包含的qt库(比如我的qt环境变量