有关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 文件传参及处理技巧分析

    JS文件传参及处理技巧分析 在JavaScript中,文件传参是一个非常常见的操作,尤其是在web开发中。在本文中,我们将介绍文件传参的一些技巧和处理方法。 传统方式:URL参数传递 在web开发中,最常见的文件传参方式是通过URL参数传递。这种方式将参数作为URL的一部分,通常被称为GET方式。以下是一个典型的URL参数的例子: http://exampl…

    JavaScript 2023年5月27日
    00
  • JS实现十分钟倒计时代码实例

    下面是详细讲解“JS实现十分钟倒计时代码实例”的完整攻略。 一、需求分析 首先,我们需要明确需求:实现一个倒计时功能,从10分钟开始倒计时,并在倒计时结束时触发一段特定的操作。 二、技术选型 接下来,我们需要选型。考虑到要实现一个网页上的倒计时,我们选用JavaScript作为主要开发语言,并采用HTML和CSS作为配套技术。 三、代码实现 首先,在HTML…

    JavaScript 2023年5月27日
    00
  • 聊一聊JavaScript作用域和作用域链

    下面是详细讲解“聊一聊JavaScript作用域和作用域链”的完整攻略。 JavaScript中的作用域 JavaScript中的作用域是指变量的适用范围,也就是变量能够被访问的区域。在JavaScript中,变量的作用域有全局作用域和局部作用域两种。 全局作用域 全局作用域是指在所有函数外部定义的变量,它的作用域范围是整个JavaScript程序。在全局作…

    JavaScript 2023年5月28日
    00
  • JavaScript搜索字符串并将搜索结果返回到字符串的方法

    搜索字符串并将搜索结果返回到字符串有几种方法,下面我将介绍其中两种方法。 方法一:indexOf()方法 indexOf()方法可以在一个字符串中查找指定的文本,并返回首次出现的位置。如果没有找到指定文本,则返回-1。我们可以使用它来搜索字符串。下面是一个示例: const str = ‘Hello, World!’; const searchStr = ‘…

    JavaScript 2023年5月28日
    00
  • 教你如何突破IE安全限制获取iframe子框架内的本地cookie(图)

    这里我会详细讲解如何突破IE安全限制获取iframe子框架内的本地cookie。 1. 背景 在WEB开发过程中,我们经常会使用iframe来引用其他页面。然而,由于浏览器安全策略的限制,不同域名下的iframe无法通过JS访问彼此的内容。本文就是围绕此问题展开,让大家掌握如何通过突破IE安全限制获取iframe子框架内的本地cookie。 2. IE安全限…

    JavaScript 2023年6月11日
    00
  • 用js判断用户浏览器是否是XP SP2的IE6

    要判断用户浏览器是否是XP SP2的IE6,可以使用以下步骤: 通过user-agent判断操作系统及浏览器版本 首先,可以通过获取用户浏览器的user-agent信息。在JavaScript中,可以通过navigator.userAgent获取,返回的是一个字符串,包含了用户浏览器的操作系统、浏览器版本等信息。 例如,下面代码中的userAgent变量就保…

    JavaScript 2023年6月11日
    00
  • js基础之DOM中document对象的常用属性方法详解

    让我来为大家详细讲解一下“js基础之DOM中document对象的常用属性方法详解”的攻略。 1.前言 文中所述的javascript版本为ES6,由于部分新特性ES6尚未得到完全支持,因此可能有些内容需要在浏览器中运行才能体现。 2.document对象 2.1 常用属性 document.URL:返回文档完整的URI地址。 document.title:…

    JavaScript 2023年5月27日
    00
  • 如何从JavaScript数组中删除空对象

    从JavaScript数组中删除空对象是一项常见的数组操作。在JavaScript中,我们可以使用filter()函数来删除数组中的空对象。 以下是具体步骤: 步骤1:创建数组 首先,我们需要创建一个包含空对象的数组。以下是一个简单的示例: const arr = [{}, { name: "张三"}, {}, { age: 18 }, …

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