当前位置: 代码迷 >> 综合 >> 数组,重载和多态,作用域,use strict,Typeof,=== 和 == 和 undefined,匿名函数,宿主对象和原生,变量提升,Attribute和property
  详细解决方案

数组,重载和多态,作用域,use strict,Typeof,=== 和 == 和 undefined,匿名函数,宿主对象和原生,变量提升,Attribute和property

热度:43   发布时间:2024-02-13 19:34:15.0

变量提升

JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
JavaScript 只有声明的变量会提升,初始化的不会

匿名函数

在这里插入图片描述

宿主对象和原生对象

内置(Build-in)对象与原生(Naitve)对象的区别在于:前者总是在引擎初始化阶段,就被创建好的对象,是后者的一个子集;而后者包括了一些在运行过程中动态创建的对象。宿主对象不是引擎的原生对象,而是由宿主框架通过某种机制注册到JavaScript引擎中的对象。
因为你不知道哪一天浏览器或javascript本身就会实现这个方法,而且和你扩展的实现有不一致的表现。到时候你的javascript代码可能已经在无数个页面中一直执行,而浏览器的实现导致所有使用扩展原型的代码都崩溃了
String对象 字符串对象,提供了对字符串进行操作的属性和方法
Array对象 数组对象,提供了数组操作方面的属性和方法
Date对象 日期时间对象,可以获取系统的日期时间信息
Boolean对象 布尔对象,一个布尔变量就是一个布尔对象。(没有可用的属性和方法)
Number对象 数值对象。一个数值变量就是一个数值对象
Math对象 数学对象,提供了数学运算方面的属性和方法

Attribute和property之间的区别

property是DOM中的属性,是JavaScript里的对象
attribute是HTML标签上的特性,它的值只能够是字符串

Document load和document DOMContentLoaded两个事件之前的区别

说明:他们的区别是,触发的时机不一样,先触发DOMContentLoaded事件,后触发load事件
DOM文档加载的步骤为
1 解析HTML结构
2 加载外部脚本和样式表文件
3 解析并执行脚本代码
4 DOM树构建完成。//DOMContentLoaded
5 加载图片等外部文件
6 页面加载完毕。//load
备注:在第4步,会触发DOMContentLoaded事件。在第6步,触发load事件

=== 和 == 和 undefined

=== 和 == , [] === [], undefined === undefined,[] == [], undefined == undefined
===:三个等号我们称为等同符,当等号两边的值为相同类型的时候,直接比较等号两边的值,值相同则返回true,若等号两边的值类型不同时直接返回false
==:两个等号我们称为等值符,当等号两边的值为相同类型时比较值是否相同,类型不同时会发生类型的自动转换,转换为相同的类型后再作比较

Typeof

number boolean string undefined object function

use strict

ECMAscript 5添加了第二种运行模式:“严格模式”(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。
设立"严格模式"的目的,主要有以下几个:
1:消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;
2:消除代码运行的一些不安全之处,保证代码运行的安全;
3:提高编译器效率,增加运行速度;
4:为未来新版本的Javascript做好铺垫。
注:经过测试 IE6,7,8,9 均不支持严格模式。
缺点:
现在网站的 JS 都会进行压缩,一些文件用了严格模式,而另一些没有。这时这些本来是严格模式的文件,被 merge 后,这个串就到了文件的中间,不仅没有指示严格模式,反而在压缩后浪费了字节

作用域

函数作用域的含义是指,属于这个函数的全部变量都可以在整个函数的范围内使用及复用(事实上在嵌套的作用域中也可以使用)。这种设计方案是非常有用的,能充分利用 JavaScript 变量可以根据需要改变值类型的“动态”特性
1.全局变量:声明在函数外部的变量(所有没有var直接赋值的变量都属于全局变量)
2.局部变量:声明在函数内部的变量(所有没有var直接赋值的变量都属于全局变量)
全局变量在整个上下文都有效只是在没有赋值之前调用,会输出undefined
函数作用域:是针对局部变量来说的,在函数中定义的变量在函数外不能获取
块级作用域:概念“{}”中间的部分都是块级作用域ex:for while if ,js中没有块级作用域,但是可以用闭包实现类似功能

重载和多态

多态: 多态的实现可以采用和继承类似的方法。首先定义一个抽象类,其中调用一些虚方法,虚方法在抽象类中没用定义,而是通过其具体的实现类来实现
重载: 重载的定义是指函数的方法名相同,但参数不同
JS中如何实现方法重载?这涉及到三个问题
1 同名函数的调用问题
2 函数中特殊的参数arguments
3 如何利用arguments实现方法重载
实现重载主要就是利用ARGUMENTS

数组

常用API
操作方法如下
concat(): 基于当前数组,创建一个新的数组,并返回这个新数组,不会改变原数组

slice(): 可以接受一个或两个参数,要返回项的起始和结束位置,返回所截取数组的项,但是不包括结束位置的项,不会改变原数组

splice(): 主要用法是向数组的中部插入项,会改变原数组,是最强大的数组方法。最多指定3个参数

indexOf()和lastIndexOf()。这两个方法都接受两个参数:要查找的项和表示查找起点位置的索引。indexOf()从数组的开头开始向后查找,lastIndexOf()从数组的末尾开始向前查找

迭代方法
A every():对数组的每一项运行给定函数,如果数组的每一项都返回true,则返回true。对数组应用该方法,有返回值为true或false

B some():对数组的每一项运行给定函数,如果数组的任一项都返回true,则返回true。对数组应用该方法,有返回值为true或false

C filter():对数组的每一项运行给定函数,返回该函数中会返回true的项组成的数组。有返回值,为符合条件的项组成的数组

D map()::对数组的每一项运行给定函数,有返回每次函数调用的结果组成的数组

E forEach():对数组的每一项运行给定函数,这个方法没有返回值。本质上与使用for循环迭代数组是一样的

归并方法
reduce()和reduceRight()。他们的区别在于从哪头开始遍历数组,除此之外,它们完全相同。 这两个方法都接收两个参宿:一个在每一项上调用的函数和(可选)作为归并基础的初始值。 传给reduce()和reduceRight()的函数接收4个参数:前一个值、当前值、项的索引和数组对象

  相关解决方案