7种JavaScript代码调试的⽅法
7种JavaScript代码调试的⽅法
JS是解释型语⾔,是逐条语句解释执⾏的,如果错误发⽣在某个语句块,此语句块以前的语句⼀般都可以正常执⾏。这不同于C等编译型语⾔。
JS是解释型语⾔,是逐条语句解释执⾏的,如果错误发⽣在某个语句块,此语句块以前的语句⼀般都可以正常执⾏。这不同于C等编译型语⾔。
代码调试的重点在于到错误发⽣点,然后才能有的放⽮。
1.alert()
通常可以使⽤警告框来提⽰变量信息。
alert(document.body.innerHTML);
当警告框弹出时,⽤户将需要单击“确定”来继续。
2.html标签内使⽤document.write()
<div id="demo">
<script>
var arr=[1,2,3,4,5]
document.write(arr[2] + '') //3
</script>
</div>
需要注意的是是,以下写法会替换整个页⾯的内容:
<button type="button" onclick="document.write(5 + 6)">试⼀试</button>
即使是函数调⽤也是如此。
3.innerHTML()
<h1>JavaScript Array.filter()</h1>
<p>使⽤通过测试的所有数组元素创建⼀个新数组。</p>
<p id="demo"></p> //45,25javascript全局数组
<script>
var numbers = [45, 4, 9, 16, 25];
var over18 = numbers.filter(myFunction);
ElementById("demo").innerHTML = over18;
function myFunction(value, index, array) {
return value > 18;
}
</script>
JS的运⾏环境是浏览器,由浏览器引擎解释执⾏JS代码,⼀般来说,浏览器也提供调试器,如chrome按F12即可调出⾼试器:
<!DOCTYPE html>
<html>
<body>
<h4>我的第⼀张⽹页</h4>
<p>使⽤F12在浏览器(Chrome、IE、Firefox)中激活调试,然后在调试器菜单中选择“控制台”。</p>
<script>
a = 5;
b = 6;
c = a + b;
console.log(c);
</script>
</body>
</html>
如果您的浏览器⽀持调试,那么您可以使⽤ console.log() 在调试窗⼝中显⽰ JavaScript 的值:
内置的调试器可打开或关闭,强制将错误报告给⽤户。
通过调试器,您也可以设置断点(代码执⾏被中断的位置),并在代码执⾏时检查变量。
< catch捕获错误
<p id="demo"></p>
<script>
try {
adddlert("欢迎您,亲爱的⽤户!");
}catch(err) {
demo.innerHTML = ssage; //adddlert is not defined
}
</script>
JavaScript 实际上会创建带有两个属性的 Error 对象:name 和 message。
name 设置或返回错误名。
message 设置或返回错误消息(⼀条字符串)。
6.debugger
debugger停⽌执⾏ JavaScript,并调⽤调试函数(如果可⽤)。
7.注释法或增量法
可以注释掉⼀些可疑代码来确定错误发⽣点。
或者考虑逐步增加代码的⽅法,逐步验证,以避免错误。
8.⼀些常见的 JavaScript 错误。
8.1 意外使⽤赋值运算符
如果程序员在 if 语句中意外使⽤赋值运算符(=)⽽不是⽐较运算符(===),JavaScript 程序可能会产⽣⼀些⽆法预料的结果。
8.2 令⼈困惑的加法和级联
加法⽤于加数值。
级联(Concatenation)⽤于加字符串。
在 JavaScript 中,这两种运算均使⽤相同的 + 运算符。
正因如此,将数字作为数值相加,与将数字作为字符串相加,将产⽣不同的结果:
var x = 10 + 5; // x 中的结果是 15
var x = 10 + "5"; // x 中的结果是 "105"
⽽加法以外的其它算法运算符可以将字符串进⾏⾃动类型转换。
10-"5" // 5
8.3 令⼈误解的浮点数
JavaScript 中的数字均保存为 64 位的浮点数(Floats),符合IEEE754的标准。
所有编程语⾔,包括 JavaScript,都存在处理浮点值的困难:
var x = 0.1;var y = 0.2;var z = x + y // z=0.30000000000000004
8.4 错位的分号
因为⼀个错误的分号,此代码块⽆论 x 的值如何都会执⾏:
if (x == 19);{ // code block}
在⼀⾏的结尾⾃动关闭语句是默认的 JavaScript ⾏为。
在 JavaScript 中,⽤分号来关闭(结束)语句是可选的。
8.5 对象使⽤命名索引
在 JavaScript 中,数组使⽤数字索引。
在 JavaScript 中,对象使⽤命名索引。
如果您使⽤命名索引,那么在访问数组时,JavaScript 会将数组重新定义为标准对象。<p id="demo"></p>
<script>
var person = [];
person["firstName"] = "Bill";
person["lastName"] = "Gates";
person["age"] = 46;
var x = person.length; // person.length 将返回 0
var y = person[0]; // person[0] 将返回 undefined
y=person["age"]; //ok
y=person.age;//ok
ElementById("demo").innerHTML = y
</script>
8.6 Undefined 不是 Null
Undefined 的类型是 Undefined,Null的类型是Object。
JavaScript 对象、变量、属性和⽅法可以是未定义的。
此外,空的 JavaScript 对象的值可以为 null。
在测试⾮ null 之前,必须先测试未定义:
if (typeof myObj !== "undefined" && myObj !== null)
8.7 JS没有块作⽤域(与C语⾔不同)
在 ES2015 之前,JavaScript 只有两种类型的作⽤域:全局作⽤域和函数作⽤域。
<!DOCTYPE html>
<html>
<body>
<h2>JavaScript</h2>
<p>JavaScript不会为每个代码块创建新的作⽤域。</p>
<p>此代码将显⽰ i(10)的值,即使在for循环块之外:</p>
<p id="demo"></p>
<script>
for (var i = 0; i < 10; i++) { // some
code
}
ElementById("demo").innerHTML = i; //10
</script>
</body>
</html>
ES2015 引⼊了两个重要的 JavaScript 新关键词:let 和 const。
这两个关键字在 JavaScript 中提供了块作⽤域(Block Scope)变量(和常量)。
for (let i = 0; i < 10; i++) { // some
code
}
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论