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

有关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停止输出代码

    如果想要在JavaScript中停止当前代码的执行,可以使用以下几种方法: 1. 使用throw语句抛出错误 使用throw语句可以抛出一个自定义的错误,从而终止代码执行。示例代码如下: function divide(a, b) { if (b === 0) { throw new Error(‘除数不能为0!’); } return a / b; } t…

    JavaScript 2023年5月28日
    00
  • 浅谈JavaScript中内存泄漏的几种情况

    浅谈 JavaScript 中内存泄漏的几种情况 JavaScript 作为一门动态语言,具有自动垃圾回收机制,可以自动管理内存,以使程序运行更加高效。然而,由于某些原因,一些对象可能会无法被垃圾收集器正确回收,导致内存泄漏。本文将介绍几种常见的 JavaScript 内存泄漏情况。 1. 全局变量 在 JavaScript 中,变量分为全局变量和局部变量。…

    JavaScript 2023年6月10日
    00
  • JavaScript操作DOM元素的childNodes和children区别

    当操作网页中的DOM元素时,常常需要获取元素的子元素以及对这些子元素进行操作。在JavaScript中,有两个常用的属性用于获取DOM元素的子元素,分别是childNodes和children。虽然它们的功能类似,但也有一些区别。下面我们进行一一讲解。 childNodes属性 childNodes属性返回某一元素的所有子节点,包括文本节点。这个属性返回的对…

    JavaScript 2023年6月11日
    00
  • JavaScript 字符串数字左补位,右补位,取固定长度,截位扩展函数代码

    下面我来详细讲解JavaScript字符串数字左补位、右补位、取固定长度、截位扩展函数的完整攻略。 JavaScript字符串数字左补位 左补位的需求在某些场景下非常常见,比如对日期格式化时,需要将月份和日期左补位补成两位数,例如1月份,格式化后应该是”01″。下面是一个左补位的示例代码: function leftPad(val, width, ch) {…

    JavaScript 2023年5月28日
    00
  • JavaScript 获取当前时间戳的代码

    获取当前时间戳是指获取当前时间与某一特定时间(一般为1970年1月1日00:00:00 UTC)之间的毫秒数。JavaScript提供了多种方法来获取当前时间戳。 Date对象的getTime()方法 在JavaScript中,Date对象提供了getTime()方法来获取当前时间戳。该方法返回自1970年1月1日00:00:00 UTC以来的毫秒数。以下是…

    JavaScript 2023年5月27日
    00
  • 如何通过Proxy实现JSBridge模块化封装

    下面我会详细讲解如何通过Proxy实现JSBridge模块化封装的攻略,具体步骤如下: 1. 设计JSBridge接口 首先,我们需要设计JSBridge的接口,即声明需要封装的方法、属性等,以供WebView与Native之间进行通信。 例如,我们可以声明一个名为JsBridge的对象,该对象具有两个方法callNative和callJs,实现WebVie…

    JavaScript 2023年6月10日
    00
  • JavaScript函数柯里化详解

    JavaScript函数柯里化详解 函数柯里化是一种常见的函数变换技术,通过对函数进行柯里化,可以使得这个函数更加灵活和具有复用性。本文将对JavaScript函数柯里化进行详细的讲解。 什么是函数柯里化 函数柯里化(Currying)是指将一个多参数函数转换为一系列单参数函数的技术,每个单参数函数都是原函数的一个变换。例如,将一个接受三个参数的函数f,转换…

    JavaScript 2023年5月27日
    00
  • 原生js实现电子时钟

    接下来我将为你讲解如何使用原生js实现电子时钟。 基本思路 使用原生js实现电子时钟的基本思路如下: 获取当前的时间,包括小时、分钟、秒钟; 将时间转换为字符串,并按照“hh:mm:ss”的格式显示出来; 每隔一秒钟刷新一次时间。 具体步骤 下面将介绍具体的实现步骤。 1. 获取当前的时间 使用js内置对象Date可以获取到当前的时间,其中包括年、月、日、小…

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