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. agc034

    A:题意:你有一个1 * n的网格,有些地方是障碍.你有两个人,分别要从a到b和从c到d,一次只能向右跳1步或者两步.求是否可行. 解:先判断有没有2个连续的障碍,然后判断是否能错车. #includ ...

  2. extern关键字及C\C++相互调用

    extern关键字主要修饰变量或函数,表示该函数可以跨文件访问,或者表明该变量在其他文件定义,在此处引用. 1.extern修饰变量 (1)如果某变量int m在a.c中定义声明,则其他b.c文件访问 ...

  3. c++设计模式:模板模式

    模板模式和策略模式的区别: 模板方法模式的主要思想:定义一个算法流程,将一些特定步骤的具体实现.延迟到子类.使得可以在不改变算法流程的情况下,通过不同的子类.来实现“定制”流程中的特定的步骤. 策略模 ...

  4. JavaSE_02_Thread类01

    1.1 并发与并行 并发:指两个或多个事件在同一个时间段内发生. 这在单 CPU 系统中,每一时刻只能有一道程序执行,即微观上这些程序是分时的交替运行,只不过是给人的感觉是同时运行,那是因为分时交替运 ...

  5. 【踩坑】nextSibling 和nextElementSibling的区别

    DOM 使用nextSibling属性返回指定节点之后的下一个兄弟节点,(即:相同节点树层中的下一个节点). nextSibling属性与nextElementSibling属性的差别: nextSi ...

  6. 通过Angular-cli创建新项目

    前提:已经安装Git 方法一:(推荐) 1.在需要创建项目的文件夹中右键打开 Git Bush Here ,在此输入  ng new ‘项目名’  --skip-install   (如下my-app ...

  7. C#icon图标文件转Image

    Icon icon = ICONHelper.GetFileIcon(filePath); MemoryStream mStream = new MemoryStream();//创建内存流 icon ...

  8. css3之弹性盒模型(Flex Box)

    CSS3 弹性盒子(Flex Box) 弹性盒子是 CSS3 的一种新的布局模式. CSS3 弹性盒( Flexible Box 或 flexbox),是一种当页面需要适应不同的屏幕大小以及设备类型时 ...

  9. [Array]628. Maximum Product of Three Numbers

    Given an integer array, find three numbers whose product is maximum and output the maximum product. ...

  10. Vue.js系列之项目搭建(vue2.0 + vue-cli + webpack )

    1.安装node node.js环境(npm包管理器) cnpm npm的淘宝镜像 从node.js官网下载并安装node,安装过程很简单,一路“下一步”就可以了(傻瓜式安装).安装完成之后,打开命令 ...