博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
面试笔记(2.JS
阅读量:6842 次
发布时间:2019-06-26

本文共 3321 字,大约阅读时间需要 11 分钟。

主要用于笔记整理,如有错误欢迎纠正,会持续更新

  • JavaScript是一种直译式脚本语言,是一种动态类型、弱类型、基于原型的语言,内置支持类型。它的解释器被称为JavaScript引擎,为浏览器的一部分,广泛用于客户端的脚本语言,最早是在HTML网页上使用,用来给HTML网页增加动态功能。JavaScript兼容与ECMA标准,因此也称为ECMAScript

  • JS类别:undefined、null、Boolean、number、string | Symbol(创建后独一无二且不可变的数据类型)

  • Object是JavaScript中所有对象的父对象 数据封装类对象: Object \ Array \ Boolean \ Number \ String 其它对象:Function \ Arguments \ Math \ Date \ RegExp \ Error

  • JavaScript基本规范

  1. 不要在同一行声明多个变量
  2. 不要使用 === / !== 来比较 true、false或者数值 ????
  3. 使用对象字面量替代newArray这种形式
  4. 不要使用全局函数
  5. switch语句必须带有default分支
  6. 函数不应该有时候有返回值,有时候没有返回值
  7. for循环必须使用大括号
  8. if语句必须使用大括号
  9. for-in循环中的变量,应该使用var关键字明确限定作用域,从而避免作用域污染
  • JavaScript原型链 每个对象都会在其内部初始化一个属性,就是prototype(原型),当我们访问一个对象的属性时,如果这个对象内部不存在这个属性,那么它就会去prototype里找这个属性,这个prototype又会有自己的prototype,于是就这样一直找下去,也就是我们平时所说的原型链的概念 关系: instance.constructor.prototype = instance.————proto__ 特点 JavaScript对象是通过引用来传递的,我们创建的每个新对象实体中并没有一份属于自己的原型副本。当我们修改原型时,与之相关的对象就会继承这一改变。 当我们需要一个属性时,JavaScript引擎会先看当前对象中是否有这个属性,如果没有的话,就会查找他的prototype对象是否有这个属性,如果地推下去,一直检索到Object内建对象。
function Func(){  Func.prototype.name = "sean";  Func.prototype.getInfo = function(){    return this.name;  }}// 现在可以参考var person = Object.create(oldObject);var person = new Func();// 它拥有了Func的属性和方法console.log(person.getInfo())// "sean"console.log(Func.prototype);// Func{name:"sean",getInfo=function()}复制代码
  • JavaScript类型的值 栈:原始数据类型(undefined、null、Boolean、number、string) 堆:引用数据类型(对象、数组、函数) 两种类型的区别: 存储位置不同; 原始数据类型直接存储在栈中的简单数据段,占据空间小,大小固定,属于被频繁使用数据,所以放入栈中存储 引用数据类型存储在堆中的对象,占据空间大,大小不固定。如果存储在栈中,将会影响程序运行的性能 引用数据类型在栈中存储了指针,该指针指向对重该实体的起始地址。当解释器寻找引用值时,会首先检索其它栈中的地址,取得地址后从栈中获得实体。

  • this 总是指向函数的直接调用者(而非间接调用者) 如果有new 关键字,this指向new出来的那个对象 在事件中,this指向出发这个事件的对象,特殊的是IE中attachEvent中的this总是指向全局的对象window 接地气来说:this 谁吊我我就指谁,没人管就指window(注意严格模式) 修改this 可以通过call、apply、bind、箭头函数 面试的时候回迷惑this情况,要分析最后this在没执行钱的作用域到底在哪儿

  • null 表示一个对象”没有值”的值,也就是值为”空“ undefined 表示一个变量声明了没有初始化(赋值) undefined不是一个有效的JSON,而null是; undefined的类型typeof 是 undefined null 的类型 typeof 是object JavaScript将为负值的变量默认值设为undefined JavaScript从爱不会将变量设为null,它是用来让程序员表明某个var 声明的变量时没有值的 验证null 需要使用=== , ==无法分别null、undefined

  • 不会去查找原型的函数 hasOwnProperty hasOwnProperty 返回一个布尔值,支出一个对象是否具有指定名称的属性,此方法无法检查改对象的原型链中是否具有该属性;该属性必须是对象本身的一个成员 object.hasOwnProperty(proName)

  • JSON 是一种轻量级的数据交换个事,它基于JavaScript的一个子集,数据格式简单,已于读写,占用宽带小

  • write只能重绘整个页面,innerHTML可以重绘页面的一部分

  • DOM操作 创建新节点 createDocumentFragment() 创建一个DOM片段 createElement() 创建一个具体的元素 createTextNode() 创建一个文本节点 添加、移除、替换、插入 appendChild()、removeChild()、replaceChild()、insertBefore() 在已有的子节点钱插入一个新的子节点 查找 getElementsByTagName() 通过标签名称 getElementsByName() 通过元素Name属性的值(IE容错能力较强,会得到一个数组,其中包括id等于name) getelementId() 通过元素ID,唯一性

  • 那些操作会造成内存泄露 setTimeout的第一个参数使用字符串而非函数的话,会引发内存泄露 闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

  • 强制类型转换:parseInt() parseFloat() Number()

  • 隐士类型转换: == !!

  • == 和 === 不同: 前者会自动转换类型,后者不会

  • 浏览器的同源策略:一段脚本(ajax)只读取来自于同一来源的窗口和文档的属性,这里的统一来源指主机名、协议和端口号的组合

JS中的隐士转换

  1. 对象和布尔值比较 对象和布尔值进行比较式,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字
[] == true; //false  []转换为字符串'', 然后转换为数组0,true转换为数字1,所以为false复制代码
  1. 对象和字符串比较 对象和字符串进行比较时,对象转换为字符串,然后两者进行比较
[1,2,3] == '1,2,3'  //true [1,2,3]转化为'1,2,3',然后和'1,2,3',所有结果是true 复制代码
  1. 对象和数字比较 对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行对比
[1] == 1;  //true 对象先转换为字符串再转换为数字,二者再比较[1] => '1' => 1 所以结果为true 复制代码
  1. 字符串和数字比较 字符串和布尔值进行比较时,二者全部转换成数值再比较 '1' == true; //true

  2. 字符串和布尔值比较 字符串和布尔值进行比较时,二者全部转换成数值再比较 '1' == true // true

  3. 布尔值和数字比较 布尔值和数字进行比较时,布尔转换为数字,二者比较 true == 1 // true

转载地址:http://tekul.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
solaris文件系统的一些理解
查看>>
SCCM 2012系列之新特性概览一:SCCM 2012安装选项和控制台新界面预览
查看>>
快排算法
查看>>
Find >强大的文本查找
查看>>
JQuery捕获或获取当前click事件的事件对象ID
查看>>
在 Linux 系统中安装Load Generator ,并在windows 调用
查看>>
How to use Ivy to manage your OSGi bundle dependen
查看>>
51CTO六周年贺礼:译文一篇
查看>>
在CentOS 7上安装Kafka
查看>>
JSP笔记——1.运行原理
查看>>
Nginx 实现AJAX跨域请求
查看>>
Centos7 搭建InfluxDB+Grafana监控平台
查看>>
Atom 安装插件失败问题 (安装源被墙) | 解决办法
查看>>
storm实战入门:开发简易Topology实例
查看>>
我的友情链接
查看>>
mysql读写分离实战
查看>>
使用Kubespray部署生产可用的Kubernetes集群(1.11.2)
查看>>
MPICH2(r8733)的错误容忍
查看>>
我的友情链接
查看>>