有关JavaScript的10个怪癖和秘密分享

yizhihongxing

有关JavaScript的10个怪癖和秘密分享

JavaScript是一门流行的编程语言,但相信大家在使用的过程中会遇到一些奇怪的行为和不为人知的秘密。本篇攻略将为你揭露JavaScript中的10个怪癖和秘密,希望能帮助你更好地理解和使用JavaScript。

1. 变量作用域

在JavaScript中,变量的作用域有全局作用域和函数作用域。当在函数内部声明变量时,该变量的作用域限制在函数内部,在函数外部无法访问。但如果没有使用var、let或const关键字声明变量,则该变量成为全局变量,可以在任何地方访问。

示例:

function test() {
  var a = 1;
  if (true) {
    var b = 2;
    let c = 3;
  }
  console.log(a); // 输出1
  console.log(b); // 输出2
  console.log(c); // 报错,无法访问变量c
}
test();

2. 自动类型转换

JavaScript是一门动态类型语言,变量类型不需要提前声明,也可以在运行时进行自动类型转换。不同类型的变量进行运算时会自动转换成相同的类型,这可能会导致意想不到的结果。

示例:

console.log( 1 + "2" + "2" ); // 输出 "122",因为1首先被转换成字符串类型,再与"2"进行拼接
console.log(1 + +"2" + "2"); // 输出 "32",因为+"2"先被转换成数字2,1+2=3,再和"2"进行拼接
console.log(1 + -"1" + "2"); // 输出 "02",因为-"1"先被转换成数字-1,1+(-1)=0,再和"2"进行拼接
console.log(+"1" + "1" + "2"); // 输出 "112",因为+"1"先被转换成数字1,再与"1"和"2"进行拼接
console.log( "A" - "B" + "2"); // 输出 "NaN2",因为"A"和"B"都不能转换成数字,所以相减的结果为NaN,再和"2"进行拼接
console.log( "A" - "B" + 2 ); // 输出 NaN,因为"A"和"B"都不能转换成数字,相减的结果为NaN,再加上数字2,结果仍然是NaN

3. 闭包

闭包是指一个函数返回另一个函数,然后将其保存在一个变量中,这个变量就成为了一个闭包。闭包会使得内部函数可以访问外部函数中的变量和参数,而这些变量和参数在外部函数执行完毕后仍然保存在内存中。

示例:

function outerFunc() {
  var a = 1;
  function innerFunc() {
    console.log(a);
  }
  return innerFunc;
}
var closure = outerFunc();
closure(); // 输出1

4. NaN

NaN是JavaScript中特殊的值,表示不是一个数字。NaN和任何值都不相等,包括自己。判断一个值是否为NaN的方法是使用isNaN()函数。

示例:

console.log(NaN == NaN); // false
console.log(NaN === NaN); // false
console.log(isNaN(NaN)); // true
console.log(isNaN("abc")); // true,因为"abc"不能转换成数字
console.log(isFinite("123")); // true,因为"123"可以转换成有穷数

5. setTimeout

setTimeout是JavaScript中用来延迟执行代码的函数。setTimeout接受两个参数,第一个参数是要执行的代码,可以是一个代码块或一个函数,第二个参数是延迟的时间,单位是毫秒。

示例:

console.log("start");
setTimeout(function() {
  console.log("middle");
}, 1000);
console.log("end");

该代码输出的结果是先输出"start"和"end",再在1秒后输出"middle"。

6. 数组拼接

JavaScript中可以使用concat()函数将一个数组与另一个数组拼接。但是如果拼接的数组是多维数组时,直接使用concat()函数会将多维数组拆开,只拼接一维数组。

示例:

var arr1 = [1, 2];
var arr2 = [[3, 4], [5, 6]];
var arr3 = arr1.concat(arr2);
console.log(arr3); // 输出 [1, 2, [3, 4], [5, 6]]

7. 正则表达式

JavaScript中的正则表达式是强大的工具,可以在字符串中搜索、替换和匹配文本。正则表达式是由一组字符和元字符组成的模式,每个字符和元字符都有特定的含义。

示例:

var str = "Hello, World!";
var pattern = /o/g;
console.log(str.match(pattern)); // 输出["o", "o"]
console.log(str.replace(pattern, "a")); // 输出 "Hella, Warld!"

8. 严格模式

JavaScript中可以使用严格模式,在严格模式下,变量必须先声明再使用,函数必须有返回值,不能删除变量或函数,不能使用eval函数,等等。

示例:

"use strict";
x = 3.14; // 报错,因为x未声明
function test() {
  "use strict";
  return; // 报错,因为必须有返回值
}

9. 继承

JavaScript中的继承是通过原型链实现的,每个对象都有一个原型对象,对象可以访问原型对象的属性和方法。如果原型对象也有原型对象,那么就可以形成原型链,实现继承。

示例:

function Animal() {
  this.name = "Animal";
}
Animal.prototype.say = function() {
  console.log("I'm an animal.");
};
function Dog() {
  this.name = "Dog";
}
Dog.prototype = new Animal();
var dog = new Dog();
dog.say(); // 输出"I'm an animal."

10. JSON

JavaScript中的JSON(JavaScript Object Notation)是一种轻量级的数据交换格式。可以使用JSON.stringify()函数将对象转换为JSON字符串,使用JSON.parse()函数将JSON字符串转换为对象。

示例:

var obj = {name: "Tom", age: 20};
var str = JSON.stringify(obj);
console.log(str); // 输出 '{"name":"Tom","age":20}'
var newObj = JSON.parse(str);
console.log(newObj); // 输出 {name: "Tom", age: 20}

以上是JavaScript中的10个怪癖和秘密分享,希望对你有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:有关JavaScript的10个怪癖和秘密分享 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • JS显示下拉列表框内全部元素的方法

    关于“JS显示下拉列表框内全部元素的方法”的完整攻略,我来给您讲解一下。 确定需求 要实现下拉列表框内全部元素的显示,我们需要先明确我们的需求,确定我们希望通过什么方式来实现这个功能。通常情况下,实现下拉列表框内全部元素的显示,我们可以采用以下两种方式: 将下拉列表框的size属性值设置为需要显示的元素个数; 通过JS获取下拉列表框中所有的选项元素,并动态为…

    JavaScript 2023年6月11日
    00
  • 一文让你快速了解JavaScript栈

    随着前端技术的不断发展,JavaScript已经成为一种非常重要的编程语言。为了让大家更好地理解JavaScript的运行机制,我准备了一篇文章,希望能够帮助大家快速了解JavaScript栈。 什么是JavaScript栈 JavaScript栈是指一种数据结构,它被用来存储函数调用时的上下文信息。每一次函数调用,JavaScript都会把该函数的上下文信…

    JavaScript 2023年5月18日
    00
  • JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果【附demo源码下载】

    概述 本文将介绍如何使用JS实现基于Sketch.js模拟成群游动的蝌蚪运动动画效果。Sketch.js是一个轻量级的库,用于创建基于HTML5画布的交互式Web应用程序。该库提供了许多工具和方法,使用户可以轻松地在画布上绘制、擦拭、编辑和操作对象。本文将通过实现蝌蚪游动动画效果,介绍如何使用Sketch.js来创作基于交互式画布的动态Web应用程序。 实现…

    JavaScript 2023年5月28日
    00
  • 浅谈javascript语法和定时函数

    浅谈JavaScript语法和定时函数 JavaScript语法 JavaScript是一种基于对象的脚本语言,主要应用于Web前端和服务器端的开发。下面我们来简单介绍一下JavaScript的语法: 数据类型 JavaScript的数据类型包括:字符串、数字、布尔值、对象、数组、null和undefined。 示例代码: var str = ‘hello’…

    JavaScript 2023年5月27日
    00
  • javascript求日期差的方法

    当我们需要计算两个日期之间的差值时,可以使用JavaScript中内置的方法来帮助我们进行计算。下面是一些常用函数的示例说明。 方法1:使用getTime()方法求日期差 使用new Date()创建两个日期对象 通过调用getTime()方法获取两个日期对象的时间戳 用两个时间戳相减得到日期差 示例代码如下: let date1 = new Date(‘2…

    JavaScript 2023年5月27日
    00
  • 页面只能打开一次Cooike如何实现

    实现页面只能打开一次 Cookie 的方法可以通过在用户访问首次打开页面时,设置一个标记位cookie,如果后续用户再次访问相同的页面,判断是否存在该标记位。 下面给出两条示例来说明如何实现: 示例一:使用JavaScript和Cookie实现页面只能打开一次 JavaScript中可以使用 document.cookie 来获取、设置、删除cookie。我…

    JavaScript 2023年6月11日
    00
  • JavaScript 中的无穷数(Infinity)详解

    那么首先需要明确的是,在 JavaScript 中,Infinity 是指表示正无穷大的数字常量。它比任何数都大,包括自身。同时,JavaScript 也提供了一个负无穷大的常量,即-Infinity。下面,我将会详细讲解 Infinity 在 JavaScript 中的应用及示例。 什么是 Infinity? Infinity 是一个 JavaScript…

    JavaScript 2023年5月27日
    00
  • 你不一定知道的关于JavaScript的正则表达式

    你不一定知道的关于JavaScript的正则表达式 在JavaScript中,正则表达式(Regular Expression)是处理字符串的一个强大的工具,我们可以通过正则表达式来匹配、查找、替换字符串。但是,你可能不知道JavaScript中正则表达式的许多细节和技巧,下面我们来一一介绍。 正则表达式基本语法 正则表达式是由字符和操作符组成的,比如: /…

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