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. vim 插入行号

    :let i=1000000|g/^/s//\=i.' '/|let i=i+1

  2. k8s 各个概念解释

    pods ,  k8s 的核心, 所有的的操作都是围绕 pod , pod 可以认为是多个容器的捆绑.pod 里的容器里共享 cpu 网络  存储.                          ...

  3. Filter - 过滤敏感词汇(动态代理)

    /** * 敏感词汇过滤器 */ @WebFilter("/*") public class SensitiveWordsFilter implements Filter { pu ...

  4. Cesium官方教程4--影像图层

    原文地址:https://cesiumjs.org/tutorials/Imagery-Layers-Tutorial/ 影像图层 Cesium支持多种服务来源的高精度影像(地图)数据的加载和渲染.图 ...

  5. JSP四大域对象与九大内置对象

    什么是内置对象? 在jsp开发中会频繁使用到一些对象,如 ServletContext.HttpSession.PageContext 等: 如果每次我们在jsp页面中需要使用这些对象都要自己亲自动手 ...

  6. IO流17 --- 对象流操作自定义对象 --- 技术搬运工(尚硅谷)

    序列化 @Test public void test14() throws IOException { ObjectOutputStream oos = new ObjectOutputStream( ...

  7. 《数据结构与算法分析——C语言描述》ADT实现(NO.03) : 二叉搜索树/二叉查找树(Binary Search Tree)

    二叉搜索树(Binary Search Tree),又名二叉查找树.二叉排序树,是一种简单的二叉树.它的特点是每一个结点的左(右)子树各结点的元素一定小于(大于)该结点的元素.将该树用于查找时,由于二 ...

  8. hive启动一些错误记录

    java.lang.RuntimeException: Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMeta ...

  9. python 中的split()函数和os.path.split()函数

    Python中有split()和os.path.split()两个函数: split():拆分字符串.通过指定分隔符对字符串进行切片,并返回分割后的字符串列表. os.path.split():将文件 ...

  10. odoo 8.0 多核启用

    对于很多企业来说,随着时间的推移,用户量或者企业建点扩张,使用erp就会出现应用访问越来越慢的情况, 其实这种情况不但限于erp,只要是有数据量增长的互联网业务必然会遇到的,因为一开始的是就没有做好大 ...