1. == 比较,它会自动转换数据类型再比较

=== 比较,它不会自动转换数据类型,如果数据类型不一致,返回false
大部分时候应该使用===来比较
2. 使用'use strict'来强制通过var申明变量
3. 注意for...in, for...of 和foreach的区别, for...in 循环属性(数组索引也是属性), for...of 循环值, foreach针对array, map, set有各自不同的回调函数
4. arguments非常有用
5. js函数定义有个特点,它会先扫描函数体的语句,把所有申明的变量提升到函数顶部,但是只是提升变量升明,不会提升变量赋值。
6. 全局变量会绑定到window上,减少冲突的一个方法是把自己的所有变量和函数全部绑定到一个全局变量中,例如|
var myApp = {};
myApp.foo = function(){}
myApp.name = "myapp";
7. js的变量作用域是函数内部,所以for(var i=0;i<10;i++)不能限制变量i只在for循环内部使用,如果要申明一个块级作用域,可以使用ES6引入的let来申明i
另一个新增的关键字是const,用来申明常量
8. IE8支持部分ES5, IE9支持大部分ES5, IE10支持全部ES5, IE11支持少量ES6, 目前ES6的支持性还不好
9. 注意apply和call的用法
10. 闭包可以说是携带状态的函数,并且它的状态可以完全对外隐藏起来,有点类似于java里面对私有变量的封装
11. ES6还支持=>来生成函数,有点类似lambda表达式,使用箭头函数后,this的指向做了一定的修复
12. 尽量不要使用包装对象String, Number, Boolean等等
13. 判断某个全局变量是否存在用typeof window.myVar === 'undefined'
函数内部判断某个变量是否存在用typeof myVar==='undefined'
判断null请使用myVar === null
14. 'a,b c'.split(/[\s\,]+/);//['a','b','c'] 用正则表达式来切分字符串。
/^(\d{3})-(\d{3,8})$/.exec('010-123455');//['010-123455', '010', '123455']用正则表达式来分组提取字符串
默认是贪婪匹配,? - 非贪婪匹配,g-全局搜索, i-忽略大小写, m-多行匹配
15. js没有类和对象的区分,所有的都是对象,要理解对象,就要理解prototype.
可以用var Student = {id:'',name:'',run:function(){}}直接创建一个对象,然后可以用Object.create(Student)创建一个新的基于Student原型的对象
也可以用构造方法的方式创建,构造方法和普通函数没有什么区别,如果使用new 调用一个函数,
它就成为一个构造函数,构造函数应该用大写字母开头。
一个常用的编程模型
function Student(props) {
this.name = props.name || '匿名'; // 默认值为'匿名'
this.grade = props.grade || 1; // 默认值为1
}
//所有实例对象共享这个函数,如果把hello定义在Student内部,则每个student实例都拥有一个hello方法,会增加内存的使用量
Student.prototype.hello = function () {
alert('Hello, ' + this.name + '!');
};
function createStudent(props) {
return new Student(props || {})
}
原型的继承相对比较复杂,需要一个中间函数来形成正确的原型链。
在新的ES6中,增加了class和extends关键字,这样看起来,类的定义就有点像java一样了,不过js原型的基本原理没有变,只是让js引擎自已去把class转换为
原型,避免自己写中间函数,让代码更容易理解和可读
现在很多浏览器还不支持ES6,如果想用ES6的话,可以使用Babel来转换,它会把你的ES6代码转换为ES5的代码
16. 服务端在设置cookie时,应该坚持使用httpOnly来防止cookie中的加密信息被js读取
17. 不应该再使用history这个遗留对象
18. ajax跨域请求的4种方式
1) 通过Flash发送http请求,这个太麻烦,用的很少
2) 通过代理服务器转发,这个也比较麻烦
3) 通过JSONP,这个有限制,只能用GET请求,返回的是js脚本,这是利用了浏览器允许跨域引用js资源
4) 在html5下,可以使用新的跨域策略CORS,这个主要是利用响应头Access-Control-Allow-Origin
19. ES6新增promise可以让异步操作更简洁明了
20. jQuery2.x版本不支持IE8
21. jQuery事件绑定用on, 解除绑定用off, 1.7之前事件绑定是用bind, 之后版本推荐使用on
22. jQuery插件编写原则
1) 给$.fn绑定函数,实现插件的逻辑
2) 插件函数要return this, 以支持链式调用
3) 插件函数要有默认值,绑定在$.fn.<pluginName>.defaults上
4) 用户在调用时可传入设定值以便覆盖默认值
23. 引入underscore/lo-dash库,以便更方面的在js中实现函数式编程, 在ES6下还有一个Sugar.js也不错, 相对而言,网上对lo-dash的期望更高,另一个lazy.js,所说性能更好,但是网上似乎用的不多。
lo-dash有一统的趋势
24. 把网页视为一种客户端,是REST架构可扩展的一个关键。
最佳实践:/static/开头的url用于静态资源文件,/api/开头的url用于rest api,其它的url视为普通的mvc请求

Javascript一些要点记录的更多相关文章

  1. iBatis & myBatis & Hibernate 要点记录

    iBatis & myBatis & Hibernate 要点记录 这三个是当前常用三大持久层框架,对其各自要点简要记录,并对其异同点进行简单比较. 1. iBatis iBatis主 ...

  2. JAVA 中LinkedHashMap要点记录

    JAVA 中LinkedHashMap要点记录 构造函数中可能出现的几个参数说明如下: 1.initialCapacity 初始容量大小,使用无参构造方法时,此值默认是16 2.loadFactor ...

  3. JavaScript实现按键记录,并在关掉网页之前把记录的内容post出去

    最近陈老师让我给新架构加一个按键记录的业务.去学习了JavaScript,网上找了一些代码,最后写出来了: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTM ...

  4. 编写高质量JavaScript代码的基本要点记录

    原文:深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点 1.最小全局变量(Minimizing Globals)的重要性 JavaScript通过函数管理作用域.在 ...

  5. python学习第一课要点记录

    写在要点之前的一段话,留给将来的自己:第一次参加编程的培训班,很兴奋很激动,之前都是自己在网上找免费的视频来看,然后跟着写一些课程中的代码,都是照着模子写,没有自己过多的思考.感觉这样学不好,除了多写 ...

  6. JavaScript 使用Document记录cookie

    cookie对于我们使用者来说,有时帮助还是挺大的,比方对于一些不是特别重要的站点,比方公司的測试平台,每次登陆都要手动输入username和password 非常繁琐.所以为了更少的引入其他框架,就 ...

  7. web基础要点记录

    最近公司项目做完了,不怎么忙,翻看了一些基础的资料,文章.就做了个简单的记录. 1.Chrome 中文界面下默认会将小于 12px 的文本强制按照 12px 显示, 可通过加入 CSS 属性  -we ...

  8. Android开发入门要点记录:四大组件

    cocos2dx跨平台开发中需要了解android开发,昨天快速的浏览了一本Android开发入门教程,因为之前也似懂非懂的写过Activity,Intent,XML文件,还有里面许多控件甚至编程思想 ...

  9. JavaScript学习要点

    Javascript相关内容 1.序列化--json - stringify() 将对象转换为字符串 - parse() 将字符串转换为对象 list=[11,22,33,44,55]; 结果:(5) ...

随机推荐

  1. 约束布局ConstraintLayout加快布局速度

    Android Studio2.2更新布局设计器,同时,引人了约束布局ConstraintLayout. 简单来说,可以把它看做是相对布局的升级版本,但是区别与相对布局更加强调约束.何为约束,即控件之 ...

  2. jeecms技术预研

      版权声明:本文版权归云焰所有,转载请注明. https://blog.csdn.net/yan_dk/article/details/27874461 1    Jeecms框架 1.1      ...

  3. 架构hive2mysql流程

    1.分析参数 args = new String[5]; args[0]="d:/3-20.sql"; args[1]="-date"; args[2]=&qu ...

  4. openCV抠图实验

    #include "pch.h" #include <opencv2/core/core.hpp> #include "opencv2/imgproc/img ...

  5. TZ_05_Spring_Transaction的纯注解开发

    1.数据库配置 jdbcConfiguation.java 1>使用Spring的EL表达式配合@Value()注解 @Value("${jdbc.Driver}") pri ...

  6. 一次完整的HTTP事务的过程、从输入URL到网页展示,浏览器都经历了什么?

    详细介绍:老生常谈-从输入url到页面展示到底发生了什么 (1)一次完整的HTTP事务的过程 基本流程: a. 域名解析 b. 发起TCP的3次握手 c. 建立TCP连接后发起http请求 d. 服务 ...

  7. Codeforces 467D

    题目链接 D. Fedor and Essay time limit per test 2 seconds memory limit per test 256 megabytes input stan ...

  8. 读书笔记--Head First PMP目录

    1.引言 2.阻止.约束和项目 3.过程框架 4.项目整合管理 5.范围管理 6.时间管理 7.成本管理 8.质量管理 9.人力资源管理 10.沟通管理 11.项目风险管理 12.采购管理 13.职业 ...

  9. Python发送QQ消息

    一.需求背景 每天早上取一批数据,数据文件经过压缩加密之后用邮箱发送,而解压密码通过QQ发送给运营.使用Python进行取数.文件加密在已经实现的情况下,需要实现通过QQ发送密码的功能.     在进 ...

  10. 使用neo4j-import导入数据及关系

    背景 上节我们了解了什么是图数据库,作为研究对象的neo4j的特点,优缺点以及基本的环境搭建. 现在我们要讲存储在csv中的通话记录数据导入到neo4j中去,并且可以通过cql去查询导入的数据及关系 ...