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. springcloud之配置中心用法

    一.配置文件服务器server端 1.构建server端所需jar <dependencies> <dependency> <groupId>org.springf ...

  2. mysql基础教程(二)-----分组函数、多表查询、常见函数

    分组函数 什么是分组函数 分组函数作用于一组数据,并对一组数据返回一个值. 组函数类型 • AVG() • COUNT() • MAX() • MIN() • SUM() 组函数语法 AVG(平均值) ...

  3. JMETER远程运行_多机联合负载

    JMETER远程运行_多机联合负载 远程运行是用一台JMeter控制机控制远程的多台机器来产生负载.控制机与负载机之间通过RMI方式来完成通信.在负载机上运行Agent程序(启动命令是%JMETER_ ...

  4. JasperReport填充报表6

    任何报告工具的主要目的是为了生产出高品质的文档.举报填充过程有助于报告工具通过操纵数据集来实现这一目标.需要报表填充过程的主要输入是: 报表模板:这是实际的JasperReport文件 报告参数:这些 ...

  5. osg如何设置抗锯齿(反走样,反锯齿)

    首先抗锯齿是什么? 举个最简单的例子 你用windows画图软件画一根直线(准确说这个叫做线段),当水平或者垂直的时候,如下图,这是绝对完美的 但是当线段出现倾斜时,就无法做到完美了此时就会出现锯齿 ...

  6. Jquery手机下拉刷新,下拉加载数据

    一.Jquery手机下拉刷新,下拉加载数据.附加有源码 <!DOCTYPE html> <html> <head> <title>手机</titl ...

  7. Leetcode113. Path Sum II路径总和2

    给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 ...

  8. workbench使用

    1.你是指默认的mysql目录下data里面的'mysql'这个schema没有在workbench里面看到吧?点击菜单-Edit->Preferences里面的SQL Editor,然后把&q ...

  9. Redis源码解析:15Resis主从复制之从节点流程

    Redis的主从复制功能,可以实现Redis实例的高可用,避免单个Redis 服务器的单点故障,并且可以实现负载均衡. 一:主从复制过程 Redis的复制功能分为同步(sync)和命令传播(comma ...

  10. java-静态-单例-继承

    概要图 一.静态 1.1 静态方法 创建对象就是为了产生实例,并进行数据的封装. 而调用功能时,确没有用到这些对象中封装的数据. 该对象的创建有意义吗?虽然可以编译并运行,但是在堆内存中空间较为浪费. ...