JavaScript 常见面试题分析(一)

Unsplash

01 JavaSctipt 中使用 typeof 能得到的类型有哪些?

这道题考察的是 JS 的变量类型,JS 的变量类型有值类型和变量类型两种,值类型包括 undefined、字符串、数字、布尔值,引用类型包括对象、数组、函数

① null 是 object 对象,一个空的指针,并没有指向任何真实的引用类型 ② typeof 只能区分值类型的详细类型 ③ typeof 能区分函数

运行结果

02 什么时候使用 === 什么时候使用 == ?

这道题考察的是强制类型转换,而在 JS 当中,在进行字符串拼接、== 运算符、if 语句、逻辑运算时会发生类型转换

运行结果 1

运行结果 2

运行结果 3

判断一个变量会被当做 ture 还是 false,可以用两个 ! 进行判断

运行结果

在 jQuery 源码中,所有的 if 判断,都是使用 ===,除了下面这种情况,这里相当于 obj.a === null || obj.a ===undefined 的简写形式

if(obj.a == null) {
    ...
}

03 JS 中有哪些内置函数?

这道题考察的是数据封装类对象,常见的内置函数有 Object, Array, Boolean, Number, String, Function, Date, RegExp, Error

04 JS 变量按照存储方式区分为哪些类型?并描述其特点

// 值类型
var a = 100;
var b = a;
a = 200;
console.log(b) //100

// 引用类型
var a = {age:20};
var b = a;
b.age = 21;
console.log(a.age) //21

特点:值类型可以把数值分块存储在内存中;引用类型则是好几个变量共用一个内存块,它是一个变量指针的赋值,不是一个真正的拷贝

05 如何理解 JSON

JSON 是一个数据格式,也是一个 JS 对象,JSON 常用的两个 API 如下

// 把对象转换成字符串
JSON.stringify({a:10, b:20}) 
// 把字符串转换成对象
JSON.parse('{"a":10, "b":20}') 

06 如何准确判断一个变量是数组类型?

运行结果

07 写一个原型链继承的例子

我们在这里写一个封装 DOM 查询的例子

function Elem(id) {
    this.elem = document.getElementById(id);
}
Elem.prototype.html = function(val){
    var elem = this.elem
    if(val){
        elem.innerHTML = val;
        return this; // 链式操作
    }else {
        return elem.innerHTML;
    }
}
Elem.prototype.on = function(type, fn){
    var elem = this.elem;
    elem.addEventListener(type, fn)
}

运行结果 1

运行结果 2

运行结果 3

08 描述 new 一个对象的过程

① 创建一个新对象;② this 指向这个新对象; ③ 执行代码,即对 this 赋值;④ 返回 this

function Human(name, age){
    this.name = name;
    this.age = age;
    this.food = 'niangao';
    // return this; // 默认有这一行 
}

var h1 = new Human('李泽言', 28);
var h2 = new Human('白起', 24);

09 判断一个函数是否是一个变量的构造函数

instanceof 用于判断引用类型属于哪个构造函数的方法,也可以判断一个变量是否为数组:变量 instanceof Arrayh1 instanceof Human 的判断逻辑是:h1__proto__ 一层一层往上,能否对应到 Human.prototype,也可以判断 h1 instanceof Object,矩形为构造函数,圆角矩形为对象

原型链

运行结果

原型规则 ①:所有的引用类型(数组、对象、函数)都具有对象特性,即可自由扩展属性(除了 null 以外)

var obj = {}; obj.a = 100;
var arr = []; arr.a = 100;
function fn () {}; fn.a = 100;

原型规则 ②:所有的引用类型(数组、对象、函数)都有一个 __proto__ 属性(隐式原型),属性值是一个普通的对象

运行结果

原型规则 ③:所有的函数,都有一个 prototype 属性(显式原型),属性值也是一个普通的对象

运行结果

原型规则 ④:所有的引用类型(数组、对象、函数),__proto__ 属性值指向它的构造函数的 prototype 属性值

运行结果

原型规则 ⑤:当试图得到一个对象(引用类型)的某个属性时,如果这个对象本身没有这个属性,那么会去它的 __proto__(即它的构造函数 prototype)中寻找

需要注意的是,无论是函数自身的属性,还是从原型中得到的属性, this 永远指向对象本身

function Human(name, age) {
    this.name = name;
}
Human.prototype.alertName = function() {
    alert(this.name)
}
var h = new Human('Nian糕')
h.printName = function() {
    console.log(this.name)
}
h.printName();
h.alertName();

运行结果

10 循环对象自身的属性

var item
for (item in f) {
    // 高级浏览器已经在 for in 中屏蔽了来自原型的属性
    // 但是这里建议大家还是加上这个判断,保证程序的健壮性
    if(f.hasOwnProperty(item)) {
        console.log(item)
    }
}

运行结果

End of File

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏数据结构笔记

python基础类型(一):字符串和列表

注意到最后三个的单双引号是嵌套使用的,但是最后一个的使用方法是错误的,因为当我们混合使用两种引号时必须有一种用来划分字符串的边界,即在两边的引号不能出现在字符串...

11820
来自专栏zingpLiu

leetcode【14题】Longest Common Prefix

  Write a function to find the longest common prefix string amongst an array of ...

12940
来自专栏Python爬虫实战

Python数据类型之数字类型

输入1就会显示1,我们怎么知道1就是整数类型呢?在Python里面有一个type()函数,它能告诉我们所代表的类型。

14020
来自专栏java思维导图

正则表达式思维导图,不再难懂

01 一张思维导图 ? 02 导图内容解析 工具 RegexBuddy 语法结构 字符 [ab5@] 匹配"a"或"b"或"5"或"@" [^abc] 匹配a、...

428110
来自专栏Python

对JAVASCRIPT匿名函数的理解

网上很多解释,我无法理解,我想知道原理。。。这篇文章应该可以透彻一点 Query片段: (function(){ //这里忽略jQuery所有实现 })...

20680
来自专栏技术碎碎念

JavaScript 数据类型

在javascript中,数据类型分为两类:基本数据类型和引用数据类型。javascript中声明变量使用关键字var。 一、基本数据类型 javascrip含...

40580
来自专栏chenjx85的技术专栏

leetcode-594-Longest Harmonious Subsequence

18550
来自专栏前端知识分享

javascript易混淆的split()、splice()、slice()方法详解

很多时候,一门语言总有那么些相似的方法,容易让人傻傻分不清楚,尤其在不经常用的时候。而本文主要简单总结了JavaScript中的关于字符串和数组中三个容易混淆的...

14320
来自专栏java一日一条

JavaScript 中对象的深拷贝

在JavaScript中,对对象进行拷贝的场景比较常见。但是简单的复制语句只能对对象进行浅拷贝,即复制的是一份引用,而不是它所引用的对象。而更多的时候,我们希望...

10020
来自专栏python成长之路

字符串常用操作

14040

扫码关注云+社区

领取腾讯云代金券