JavaScript易错知识点整理

JavaScript易错知识点整理

本文将整理出JavaScript中经常易错的知识点,包括但不限于变量作用域、数据类型、语法注意点等。通过阅读本文,你将能够更加熟练地使用JavaScript。

变量作用域

var声明变量的作用域

在JavaScript中,使用var声明的变量,其作用域为函数级作用域。这意味着在函数内部声明的变量,在函数外部是无法访问的。但是如果在函数内部使用了var声明的变量,在函数外部同样可以访问到这个变量,这是因为JavaScript有变量提升的机制。

示例:

function foo() {
  if (true) {
    var x = 10;
  }
  console.log(x); // 输出结果为10
}

foo();

在上面的示例中,函数内部使用var声明了一个x变量,在if语句块内进行了赋值操作。如果没有使用var进行声明的话,x变量的作用域仅限于if语句块内部。

let和const声明变量的作用域

在ES6中引入了let和const来声明变量,它们的作用域为块级作用域。这意味着在块级作用域内声明的变量,在块外部是无法访问的。

示例:

function foo() {
  if (true) {
    let x = 10;
    const y = 20;
  }
  console.log(x); // 报错:x未定义
  console.log(y); // 报错:y未定义
}

foo();

在上面的示例中,使用let和const声明的变量,其作用域仅限于if语句块内部。在块外部访问这些变量会报错。

数据类型

NaN

NaN是JavaScript中的特殊值,它表示“不是一个数字”。使用isNaN()函数可以判断一个值是否为NaN。但是需要注意的是,NaN与任何值都不相等,包括自己本身。

示例:

console.log(NaN == NaN); // 输出结果为false
console.log(isNaN(NaN)); // 输出结果为true
console.log(isNaN('abc')); // 输出结果为true

在上面的示例中,第一个console.log输出结果为false,这是因为NaN与任何值都不相等,包括自己本身。第二个console.log输出结果为true,这是因为NaN是唯一一个与自己不相等的值。第三个console.log输出结果也为true,这是因为字符串'abc'无法进行转换为数字,会被转换为NaN。

引用数据类型

JavaScript中存在着基本数据类型和引用数据类型两种数据类型。引用数据类型包括对象、数组、函数等。

引用数据类型在传递参数时,传递的是其在内存中的地址,也就是说,函数内部如果改变该参数,会对原对象产生影响。

示例:

function change(obj) {
  obj.name = 'Alice';
}

var person = {
  name: 'Bob'
};
change(person);
console.log(person); // 输出{name: 'Alice'}

在上面的示例中,定义了一个change函数用来改变对象的属性值。在函数外部声明了一个person对象,执行change函数后,person对象的name属性被改为了'Alice'。

语法注意点

三元表达式的注意点

在JavaScript中,三元表达式可以用来进行简单的条件判断。但是需要注意的是,三元表达式的判断条件部分需要使用严格相等运算符(===)。

示例:

var x = 1;
var result = x == 1 ? 'Yes' : 'No';
console.log(result); // 输出Yes

var y = false;
var result2 = y == false ? 'Yes' : 'No';
console.log(result2); // 输出Yes

var z = 0;
var result3 = z == false ? 'Yes' : 'No';
console.log(result3); // 输出Yes,这里需要注意

在上面的示例中,第一个和第二个三元表达式都能够正确地输出结果。但是第三个三元表达式输出了'Yes',这是因为JavaScript会进行类型转换,将数字0转换为false进行比较。所以在使用三元表达式时需要特别注意类型转换的问题。

for...in循环的注意点

在JavaScript中,可以使用for...in循环来遍历对象的属性。但是需要注意的是,在遍历时会遍历对象的原型链上的属性。如果只想遍历对象本身的属性,需要使用hasOwnProperty函数来判断。

示例:

var person = {
  name: 'Bob',
  age: 18
};

Object.prototype.gender = 'male';

for (var prop in person) {
  console.log(prop);
}
// 输出 name、age、gender

for (var prop in person) {
  if (person.hasOwnProperty(prop)) {
    console.log(prop);
  }
}
// 输出 name、age

在上面的示例中,第一个for...in循环遍历了person对象的name、age以及原型链上的gender属性。第二个for...in循环遍历了person对象的name、age属性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:JavaScript易错知识点整理 - Python技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • JS简单实现查看文档创建日期、修改日期和文档大小的方法示例

    下面是 “JS简单实现查看文档创建日期、修改日期和文档大小的方法示例” 的完整攻略。 1.获取文档创建日期和修改日期 要获取文档创建日期和修改日期,我们可以使用 JavaScript 中的 Date 和 Document 对象。 首先,我们需要获取文档的最后修改时间和创建时间。下面是一个简单的 JS 代码示例。 // 获取文档最后修改时间和创建时间 var …

    JavaScript 2023年5月27日
    00
  • JS二维数组的定义说明

    JS的二维数组是指一个数组中包含着另一个数组,即数组的数组。二维数组在处理矩阵类的数据时非常有用,并在编程中也经常被使用。 定义方式 定义一个二维数组可以使用以下两种方式: 嵌套数组 嵌套数组的方式就是在一个数组内部再定义一个数组,如下面的例子所示: let arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; 这个二维数组的…

    JavaScript 2023年5月27日
    00
  • JS简单判断字符在另一个字符串中出现次数的2种常用方法

    让我来介绍一下JS简单判断字符串在另一个字符串中出现次数的2种常用方法。下面将结合代码给出具体的示例: 1. 方法一:for循环遍历字符串 // 定义待匹配字符和被匹配字符 const targetStr = "hello"; const sourceStr = "hello world, hello everyone&quot…

    JavaScript 2023年5月28日
    00
  • JavaScript高级程序设计 DOM学习笔记

    我将为您详细讲解“JavaScript高级程序设计 DOM学习笔记”的完整攻略。 学习JS DOM的必要性 JavaScript中,DOM(文档对象模型)是一种非常重要的知识点,它是在HTML和XML文档中操作和访问节点的API。掌握DOM可以让我们更加灵活地操作页面元素,更好地实现网页的交互效果。 学习JS DOM的入门 获取元素 在DOM中,我们首先要学…

    JavaScript 2023年5月27日
    00
  • 浅谈String.valueOf()方法的使用

    当我们需要将其他类型的数据转换为字符串时,就会用到Java中的valueOf()方法。String类提供了一个静态的valueOf()方法,可以接受多种类型的参数,并将其转换为字符串类型。本文将详细讲解String类的valueOf()方法的使用方法。 String.valueOf()方法的语法 String类的valueOf()方法具有以下语法: publ…

    JavaScript 2023年6月10日
    00
  • Javascript点击其他任意地方隐藏关闭DIV实例

    好的。您想实现的效果是当用户在页面上点击除某个指定的div以外的其它任何地方时,可以将该指定的div隐藏起来。实现这个功能可以使用JavaScript。 下面是实现该功能的完整攻略: 1.在HTML中添加div元素 首先,在HTML文档中添加包含需要隐藏的内容的div元素。例如,下面的代码创建一个div元素: <div id="myDiv&q…

    JavaScript 2023年6月11日
    00
  • JavaScript判断对象和数组的两种方法

    当需要判断一个变量是对象还是数组时,JavaScript提供了两种方法: 1. 使用typeof运算符 使用typeof运算符,可以检测一个变量的数据类型,如果返回值是”object”,就可以判断这个变量是对象或数组。 // 判断对象 let obj = {}; if (typeof obj === "object" &&…

    JavaScript 2023年5月27日
    00
  • 详解XMLHttpRequest(二)响应属性、二进制数据、监测上传下载进度

    一、介绍 本文是《详解XMLHttpRequest》系列的第二篇。在第一篇文章中,我们深入学习了XMLHttpRequest对象的用法、属性和方法。在本文中,我们将了解更多的响应属性、二进制数据和监测上传、下载进度的相关知识。 二、响应属性 在发送XMLHttpRequest请求后,可以使用以下响应属性来获取请求的响应。 1. responseText re…

    JavaScript 2023年6月10日
    00
合作推广
合作推广
分享本页
返回顶部