DOM特殊元素获取

document.documentElement //HTML标签

document.head //head标签

document.title //title标签

document.body //body标签

typeof 的那些坑

typeof null 返回Object, 然而null是基本类型值而不是引用类型值,null == null 是成立的。

typeof NaN 返回number,NaN是一个自身不等于自身的数值类型。

typeof Symbol 返回function。

平稳退化和逐渐增强

平稳退化:可让访问者的浏览器在不支持JS的情况下仍能顺利地浏览网站。

逐渐增强:用一些额外的信息层去包裹原始数据,用css,js去包裹html结构。

按照逐渐增强的原则创建出来的网页几乎都符合平稳退化原则。

性能考虑

  • 尽量减少访问DOM和标记。查询DOM中的某个元素都会搜索整个DOM树,因此最好将搜索结果保存在变量中后续操作使用。从源头上减少html元素节点以减小DOM树规模也是一点。
  • 合并和放置脚本。合并多个脚本为一的原因可以减少加载页面时的请求数量,这是性能优化时首先需要考虑的。合理放置脚本(把script标签置于/body标记前,可先让其他文件并行加载,并在加载JS脚本时window对象的onload事件依然可以执行对文档进行各种操作)。
  • 压缩脚本。删除空格注释,用短小的变量函数名替代,以达到精简脚本大小的目的。

var,let 和 const的区别

var 属于ES5的关键词,有变量提升作用,不存在块级作用域,因此容易出现被添加到在外部环境的问题。可以重复声明。在全局环境下声明一个变量会成为顶层对象的属性。

let和const属于ES6的关键词,无变量提升,存在TDZ,存在块级作用域,不可以重复声明。在全局环境下声明不会成为顶层对象的属性。

其中const声明常量,需要在声明的同时赋值,并且变量的值之后不能改变。

HTML元素的动态获取和静态获取

  • 动态获取: 获取的变量是一组元素,当其中一个发生改变,第二次操作这组元素时,就会从新获取一次,不在计算改变的那一个 。讲白了就是根据特点的特征来捕获,只要你是美女不管你是不是化了妆都会被选上。

    getElementsByClassName/TagName/Name

  • 静态获取:获取之后,就制定某一个对象或者节点,和节点的任何变化都没有关系 。讲白了就是就算你改了名整了容,化成灰我都认得你。

    getElementsById/querySelector/querySelectorAll

this的指向问题

默认绑定

  • 在全局环境或是函数自执行情况下,this指向全局变量window

  • 被作为某个对象的方法调用时候,this指向那个对象

  • 被嵌套的函数独立调用时this指向window

var a = 0;
var obj = {
a : 2,
foo:function(){
function test(){
console.log(this.a);
}
test();
}
}
obj.foo(); //window
  • 闭包中里面函数独立调用,而不是方法调用,this默认绑定到window

隐式绑定

  • 一般被直接对象所包含的函数调用时,也称之为方法调用,this隐式绑定到该直接对象
function fun(){
console.log(this.a);
};
var obj1 = {
a : 1,
foo:fun,
obj2:{
a : 2,
foo :fun
}
}
obj1.foo();//1
obj1.obj2.foo();//2

箭头函数

  • 箭头函数没有自己的 this,当在内部使用了 this时,它会指向最近一层作用域内的 this

严格模式

  • 严格模式下this指向顶层对象window

还有一些奇葩操作。。。

object.getName和(object.getName)定义是相同的,所以返回'My Object'没有问题

(object.getName = object.getName)这里括号内进行了赋值操作,而这个值是函数本身。再赋值完毕后再调用了自身,所以当作函数自执行返回的是全局变量中的name属性。

var name = 'The window';
var object = {
name : 'My Object',
getName : function(){
return this.name;
}
}; object.getName(); //'My Object'
(object.getName)(); //'My Object'
(object.getName = object.getName)(); //'The window'

DOM节点css样式对象的读取

IE:node.currentStyle

非IE: getComputedStyle(node)

兼容: function getCSS(node){ return node.currentStyle || getComputedStyle(node);}

前端知识点回顾——Javascript篇(一)的更多相关文章

  1. 前端知识点回顾——Javascript篇(二)

    JavaScript的解析顺序 第一阶段:编译期 寻找关键字声明的变量.函数声明的变量,同时会对变量进行作用域的绑定 var声明的变量,在编译期会赋一个默认值undefined,变量提升的特性. ES ...

  2. 前端知识点回顾——Javascript篇(六)

    fetch 在原生ajax+es6promise的基础上封装的一个语法糖,返回promise对象. fetch(url, initObj) .then(res=>res.json()) .the ...

  3. 前端知识点回顾——Javascript篇(五)

    DOM 常用的DOM获取方法: node.children 返回子元素节点,没有兼容性问题,动态获取 node.parentNode 获取父节点,没有兼容性问题 node.offsetParent 获 ...

  4. 前端知识点回顾——Javascript篇(四)

    Symbol 为什么需要symbol ES5里面对象的属性名都是字符串,如果你需要使用一个别人提供的对象,你对这个对象有哪些属性也不是很清楚,但又想为这个对象新增一些属性,那么你新增的属性名就很可能和 ...

  5. 前端知识点回顾——Javascript篇(三)

    数组的冒泡.选择和插入排序法 冒泡排序法(从小到大) function bubble(arr){ for(let i = 0 ;i<arr.length-1;i++){ for(let j = ...

  6. web前端知识点(JavaScript篇)

    call,apply,bind call,apply,bind这三者的区别,及内部实现原理,点这里 promise promise函数的内部实现原理,点这里 闭包 闭包就是能够读取其他函数内部变量的函 ...

  7. 前端知识点回顾——HTML,CSS篇

    前端知识点回顾篇--是我当初刚转行为了面试而将自己学过的前端知识整理成的一份笔记,个人目的性很强,仅供参考. doctype 有什么用 doctype是一种标准通用标记语言的文档类型声明,目的是告诉标 ...

  8. [转] Web前端优化之 Javascript篇

    原文链接: http://lunax.info/archives/3099.html Web 前端优化最佳实践之 JavaScript 篇,这部分有 6 条规则,和 CSS 篇 重复的有几条.前端优化 ...

  9. 前端开发之JavaScript篇

    一.JavaScript介绍  前端三剑客之JavaScript,简称js,可能是这三个里面最难的一个了.很早以前,市面上流通着三种js版本,为了统一,ECMA(欧洲计算机制造协会)定义了规范的版本, ...

随机推荐

  1. Apache httpclient的execute方法调试

    因为工作需要,想研究一下execute执行的逻辑. 在这一行调用execute: response = getHttpClient().execute(get); getHttpClient的实现: ...

  2. “最不合格”的SAP应聘者: 从大学生到SAP成都研究院开发工程师

    让我们把时光之轮倒拨回2006年,SAP成都研究院刚刚成立的时候,有一位年轻的电子科技大学研究生,网名雷米兰(这名字一看就是AC米兰铁杆粉丝),加入了SAP成都研究院并被派遣到SAP德国总部进行实习. ...

  3. Django—model系统:ORM之其他骚操作

    Django ORM执行原生SQL # extra # 在QuerySet的基础上继续执行子语句 # extra(self, select=None, where=None, params=None, ...

  4. textbox 输入值提示。。。(类似百度搜索)

    public void textBox5_xiala() { DataSet ds = SQl_yuji.ds_cinvname(); this.textBox5.AutoCompleteMode = ...

  5. Protocol handler start failedCaused by: java.net.SocketException: Permission denied

    最近在使用mac启动项目的时候,发现原本在Windows下正常跑的项目报错如下: Protocol handler start failedCaused by: java.net.SocketExce ...

  6. 关于C++ Builder Codegurad 问题的排查。

    关于C++ BUILDER6 我目前不知道有什么特别好的内存排查工具.尤其为了对付memory leak, (Eurekalog 这个工具内存泄漏主要针对delphi,BCB配置比较繁琐). 除了BC ...

  7. 【WEB】jQuery 判断复选框是否选中

    1.背景 在 jQuery 1.6 版本之前,判断方式 <input type='checkbox' id='test'/> <script> var isChecked = ...

  8. 误删rpm命令的恢复方法

    rpm命令不能用了,被依赖的yum也不能使用了, 恢复rpm命令无外乎重装, 重装方法1: 使用源码编译,  需要gcc ,cmake包,如果没装,悲剧了 重装方法2: 找一台,和出问题的这台同样系统 ...

  9. 粗暴,干就完了----徐晓冬似的C语言自学笔记----前言

    10对年前就觉得C/C++语言很酷,第一印象就是90年代末,个人电脑在中华大地开始普及的岁月中,层出不穷的病毒,对了,全是C/C++写的:除了危及人民群众信息安全以外,C系列语言用途甚广,可以发明其他 ...

  10. Windows 刷新系统图标缓存

    rem 关闭Windows外壳程序explorer taskkill /f /im explorer.exe rem 清理系统图标缓存数据库 attrib -h -s -r "%userpr ...