js面试相关
〇,字符串,数值,数组的转化
(0)检测数据类型
参考连接:http://www.cnblogs.com/onepixel/p/5126046.html
1,, typeof 操作符 : 能检测到(string, undefined, number, boolean, function(函数), object(NULL,数组,对象);缺点:无论啥类型的对象,返回的都是object;使用方法: typeof a;
2,, instanceOf 操作符 : 检测一个对象是否为某个构造函数的实例 ;使用方法: arr instanceof Array; arr instanceOf Function;
3,, isPrototypeOf 方法 : 检测是不是该对象的原型
4,, toString() 是 Object 的原型方法,调用该方法,默认返回当前对象的 [[Class]]
Object.prototype.toString.call('') ; // [object String]
Object.prototype.toString.call(1) ; // [object Number]
Object.prototype.toString.call(true) ; // [object Boolean]
Object.prototype.toString.call(Symbol()); //[object Symbol]
Object.prototype.toString.call(undefined) ; // [object Undefined]
Object.prototype.toString.call(null) ; // [object Null]
Object.prototype.toString.call(new Function()) ; // [object Function]
Object.prototype.toString.call(new Date()) ; // [object Date]
Object.prototype.toString.call([]) ; // [object Array]
Object.prototype.toString.call(new RegExp()) ; // [object RegExp]
Object.prototype.toString.call(new Error()) ; // [object Error]
Object.prototype.toString.call(document) ; // [object HTMLDocument]
Object.prototype.toString.call(window) ; //[object global] window 是全局对象 global 的引用
(1)数据类型 ==》转成 Boolean 类型
| 数据类型 | 转换为true的值 | 转换为false的值 |
| Boolean | true | false |
| String | 任何非空字符串 | 空字符串 |
| Number | 任何非零数字值(包括无穷大) | 0和Null |
| Object | 任何对象 | null |
| Undefined | Undefined |
(2)数据类型 ==》转成 Number 类型
| 数据类型 | 转换为Number的值 | |
| Null | 0 | |
| Undefined | NaN | |
| String | 全数字’002‘ | 忽略前导0的数字2 |
| ' ' 空字符串 | 0 | |
| 其他 | NaN | |
| Boolean | true | 1 |
| false | 0 | |
| Object | 先查询valueOf(), 然后使用toString() | |
(3)数据类型 ==》转成 String 类型
使用 a.toString(), 或直接 String(a)
| 数据类型 | 转换为String的值 | |
| Boolean | true | 'true' |
| false | 'false' | |
| Number | 0 | '0' |
| Null | null | 'null' |
| Undefined | undefined | 'undefined' |
| Array | 使用toString()方法 |
(4)数据类型 ==> 转成数组Array
| 数据类型 | 方法 |
| String | string的方法:split() |
|
类数组的对象; 可遍历的对象(Set,Map) |
Array.from(a); |
|
[...a] |
(5)判断是否为真(在boolean上下文中转换后的值为真的值:truthy)
true !== Truthy
所有的值都是真值,除非被设置成false, '', null, NaN, 0, undefined
参考链接:https://developer.mozilla.org/zh-CN/docs/Glossary/Truthy
if([]) //Truthy
if({})
if(true)
if(42)
……
但是{}!=false/ true/ NaN / null / undefined / 0;
[ ] ==' '; [ ]==0; [ ]==false
一,字符串
二,数值
三,函数
(1)函数定义
//函数声明
function sum(a,b){
return a+b;
} //函数表达式
var sum = function(a,b){
return a+b;
} //Function构造函数【这也是一个表达式,不建议使用,影响函数解析性能】、
var sum = new Function('a', 'b', 'return a+b')
(2)匿名函数与闭包
匿名函数:没有名字的函数
闭包:有权访问另一个函数作用域内的变量的函数。常见方式就是在一个函数内创建另一个函数。
闭包特点:
(1)返回函数中的变量的最后一个值(即return的值)
(2)闭包函数会一直留在内存中,直至销毁
(3)可用于创建私有变量
(3)this对象
this对象是在运行时基于函数的执行环境所决定的。
全局函数:this等于window
当函数作为某个对象的方法被调用的时候,this等于那个对象。
四,数组
五,对象
(1)js对象分类
参考:https://juejin.im/entry/58f85f87b123db006235e938
a,本地对象:独立于宿主环境的 ECMAScript 实现提供的对象
Object,Function,Boolean,Symbol,Array,Number,Date,String,RegExp,Map,Set,WeakMap,WeakSet,Promise,Generator,Reflect,Proxy,Error
b,内置对象:独立与宿主环境的所有对象,在ECMAScript程序开始执行时出现”。这意味着开发者不必明确实例化内置对象,它已经被实例化了。内置对象都是本地对象。
Global:在web浏览器中,将window对象作为global对象使用
Math
c,宿主对象:宿主环境提供的对象
包括BOM对象和DOM对象
- BOM 对象:window,location,navigator,screen,history
- DOM 对象:Document,Body,Event,Form,Image,事件对象 event
d,自定义对象
就是开发人员自己定义的对象
六,面向对象
(1)继承
a,基本原理:利用原型让一个引用类型继承另一个引用类型的属性和方法
b,构造函数,原型,实例的关系
参考链接: https://github.com/mqyqingfeng/Blog/issues/2
(1)prototype原型属性
函数才会有的属性,prototype属性是一个指针,指向一个叫原型的对象
(2)原型
每一个js对象(除了null)在创建的时候就会有一个相关联的对象,叫原型
(3)__proto__
每一个js对象(除了null)都有的一个属性,叫__proto__,这个属性指向该对象的原型
(4)constructor构造器
每个原型都有一个constructor属性指向关联的构造函数
function Person(){}
var person = new Person(); //下图为构造函数,原型,实例之间的关系

(c)原型链
上图中形成了一个原型链,
person -------(__proto__)-------Persion.prototype-------(__proto__)--------Object.prototype
(d)原型搜索机制
当以读取模式访问一个实例属性时,
首先,在实例中搜索该属性。(搜索person实例)若没有找到 ↓↓
其次,继续搜索该实例的原型(搜索Person.prototype),若没有找到 ↓↓
最后,直到搜索到原型链末端(搜索Object.Prototype)
(e)确定原型与实例之间的关系
//instanceof操作符
console.log(person instanceof Person); //true,即person是Persion的实例
console.log(Person instanceof Object); //true //isPrototypeOf()方法
console.log(Person.prototype.isPrototypeOf(person)); //true,即Person.prototype是person的原型
console.log(Object.prototype.isPrototypeOf(Person)); //true
七,AJAX
js面试相关的更多相关文章
- Vue + Js 面试宝典
https://github.com/rohan-paul/Awesome-JavaScript-Interviewshttps://github.com/nieyafei/front-end-int ...
- 46、VUE + JS 面试宝典
https://github.com/rohan-paul/Awesome-JavaScript-Interviewshttps://github.com/nieyafei/front-end-int ...
- 1、java编程的建议,面试相关
http://www.cnblogs.com/selene/p/5829605.html 面试相关:http://www.cnblogs.com/anrainie/p/5640208.html lin ...
- Java基础面试相关
面试相关的问题(下) 四 Linux高级_ 1.Linux机器 变慢,怎么查看? (1)整机的性能 主要查看的是CPU和内存 先查看整机的top,使用命令 top 虚拟机 使用1可以查看哪个核被占用过 ...
- js的相关距离
js的相关距离 一.dom对象的距离 ---dom.style.width : 对象本身的内容宽度(这里必须是内联样式中的width,带px)(content) ---dom.style.height ...
- node.js 使用----相关常用命令总结
node.js 使用----相关常用命令总结 1. 下载并安装node.js 2. 设置全局模块存放的目录 2.1 查看默认配置 npm config ls 2.2 修改全局模块存放目录 npm co ...
- js事件相关面试题
说是面试题,其实也相当于是对js事件部分知识点的一个总结.简单内容一笔带过,了解详情我都给出了参考链接,都是之前写的一些相关文章.JavaScript本身没有事件模型,但是环境可以有. DOM:add ...
- 前端js面试中的常见的算法问题
虽说我们很多时候前端很少有机会接触到算法.大多都交互性的操作,然而从各大公司面试来看,算法依旧是考察的一方面.实际上学习数据结构与算法对于工程师去理解和分析问题都是有帮助的.如果将来当我们面对较为复杂 ...
- node.js及相关组件安装
第一步:下载安装文件(下载地址:官网http://www.nodejs.org/download/ )第二步:安装nodejs(双击直接安装) 安装完成后使用命令行查看版本信息,出现版本号说明安装成功 ...
随机推荐
- git 控制版本
git:版本控制工具 1.进入想要进行版本控制项目的文件夹内 2.右击->Git Bash Here 3.初始化 git init 会多出一个.git隐藏文件夹 4.查看文件状体 git sta ...
- 域渗透之票据传递攻击(pass the ticket,ptt)
票据传递攻击(PtT)是一种使用Kerberos票据代替明文密码或NTLM哈希的方法.PtT最常见的用途可能是使用黄金票据和白银票据,通过PtT访问主机相当简单. 1.ptt攻击的部分 就不是简单的N ...
- 《代码整洁之道》&《程序员的职业素养》
这是why技术的第32篇原创文章 春节期间读了两本技术相关的书籍:编程大师Bob大叔的<代码整洁之道>和<代码整洁之道:程序员的职业素养>. <代码整洁之道>出版于 ...
- AVLTree(C++实现)没有统一旋转操作
最近疫情比较严重,只能在家里休息,利用休息之余,我用C++把AVL树实现了一遍 大学老师只讲一些比较简单的数据结构和算法,这些高级数据结构还是需要自己主动学习并且动手来实现的, 从前只听说过AVLTr ...
- gerrit merge后不能提交问题
需求:git 分支合并 问题:使用 git merge 在本地执行分支合并操作,然后想 push 到 gerrit 上评审入库,可是在提交时,提示: ! [remote rejected] HEAD ...
- 乌班图14更新软件提示错误:https://mirrors.aliyun.com kubernetes-xenial InRelease: 由于没有公钥,无法验证下列签名: NO_PUBKEY 6A030B21BA07F4FB
提示如下 获取: https://mirrors.aliyun.com kubernetes-xenial InRelease 忽略 https://mirrors.aliyun.com kubern ...
- 7天用Go动手写/从零实现Web框架Gee
设计一个框架 大部分时候,我们需要实现一个 Web 应用,第一反应是应该使用哪个框架.不同的框架设计理念和提供的功能有很大的差别.比如 Python 语言的 django和flask,前者大而全,后者 ...
- 【干货】国外程序员整理的 C++ 资源大全–日常工作,我觉得用处确实很大,所以分享
考到群里的纯技术文章比较少,发一篇,其实不限于C++可用,这些东西 百度文库链接10 百度云下载15 我个人感觉很有用的,因为其中有些东西时 头儿让我在项目里用的 关于 C++ 框架.库和资源的一些 ...
- LaTeX技巧472:定义一个LaTeX参考文献不带编号且有缩进的方法
LaTeX_Fun的博客 LaTeX技巧381:参考文献项第二行缩进如何定义? \makeatletter\renewenvironment{thebibliography}[1]{\section* ...
- HDU_1394_线段树
http://acm.hdu.edu.cn/showproblem.php?pid=1394 线段树入门题,每次读入一个数,就寻找在树中比它大的值的个数,然后更新树,把个数相加就是逆序数,每移动一个数 ...