前端面试准备笔记之JavaScript(03)

01. 变量声明提升

在预解析的时候,成员变量和函数,被提升到最高的位置,方便其他程序访问。

  • 可以先使用后声明。
  • 只提升变量名,不提升变量值
  • let const 声明的变量不具有变量声明提升。
// 先使用
x = 5; // 变量 x 设置为 5

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x;                     // 在元素中显示 x
// 后声明
var x; // 声明 x


// 先声明和初始化了x
var x = 5; // 初始化 x

elem = document.getElementById("demo"); // 查找元素 
elem.innerHTML = x + " " + y;           // 显示 x 和 y

// y声明可以提升,但是y=7初始化并不会提升。
var y = 7; // 初始化 y

02. 面向对象

面向对象就是使用对象来进行开发,关注的是用什么对象可以实现功能,不去关注对象中细节,早期的是面向过程进行开发,面向对象可以理解为对面向过程的一个封装。

特性:

  • 抽象性,就是说在一个具体的环境中,不知道这个数据集表示的是什么对象。
  • 封装性,就是将一些复杂繁琐的步骤、操作方式包裹起来,对外暴露简单的接口,通过这个简单的接口实现复杂的功能。
  • 继承性,对数据进行复用,就是本身没有但是别人有,可以从别人那里得到。
  • 多态性,不同的变量调用同一个方法,得到的结果不同,这个调用称为多态。
03. new 操作符都做了什么
  • 创建一个空对象,并且this变量引用了该对象,同时还继承了该函数的原型。
  • 属性和方法被加入到this引用的对象中。
  • 新创建的对象由this引用,应且最后隐士的返回this。
04. 如何准确判断一个变量是不是数组
a instaceof Array
05. 类型判断 instanceof
// 联系3.3示例
xialuo instanceof Student //true
xialuo instanceof People //true
xialuo instanceof Object //true

[] instanceof Array //true
[] instanceof Object //true
{} instanceof Object //true
06. 比较typeof与instanceof

相同点:javascript中typeof与instanceof常用来判断一个变量是否为空,或者是什么类型的。

  • typeof的定义和用法:返回值是一个字符串,用来说明变量的数据类型,细节:
  1. typeof一般只能返回如下几个结果:number、boolean、string、function、object、undefined
  2. typeof来获取一个变量是否存在,如if(typeof a!="undefined"){(alert("OK")},而不要去使用if(a)因为a如果不存在未声明则会出错。
  3. 对于Array,Null等特殊对象使用typeof 一律返回object,这正是typeof的局限性。
  • Instanceof定义和用法:instanceof用于判断一个变量是否属于某个对象的实例(实例可以理解为引用的意思)
// 实例演示
a instanceof b?alert("true"):alert("false"); //a是b的实例?真:假

var a = new Array(); 
alert(a instanceof Array); // true
alert(a instanceof Object) // true

// 如上,会返回true,同时alert(a instanceof Object)也会返回true;这是因为Array是Object的子类。

function test(){};
var a = new test();
alert(a instanceof test) // true
  • 细节:
    如下,得到的结果为"N",这里的instanceof测试的object是指js语法中的object,不是指dom模型对象。
if (window instanceof Object) {alert("Y") else {alert("N")}}
posted @ 2021-01-27 13:45  晨峰笔记  阅读(39)  评论(0)    收藏  举报