Javascript基础知识整理
1.ECMAScript有5中简单数据类型 Undefined,Null,Boolean,Number,String 一种复杂数据类型 Object
2.undefined 不是未定义,而是声明之后没有对其进行初始化(赋值)
3.基本类型的值无法添加属性,只能给引用类型的值添加。
4.typeof 用来检测基本数据类型 instanceof 则用来检测引用数据类型
5.数组:数组的length属性是可读写的,通过设置length可以从数组的末尾移动项或向数组中添加新项。
数组可以使用push方法(在数组尾部追加项并返回改后长度)和pop方法(删除尾部项,并返回该项) 模拟栈的数据结构。 也可以使用push+shift或unshift+pop实现队列数据结构 注:IE7及以下版本的unshift()方法返回undefined而不是新数组长度
6.变量、函数及函数表达式的声明
JS中的变量采用预声明的方式 即无论声明的位置在哪里,解析器会在进入该执行上下文的时候首先对其进行声明,并初始化为 undefined.
function xx(){ a(); b(); var m = 1; if(false){ var n = "s"; } } 实际效果 function xx(){ var m,n; a(); b(); m = 1; if(false){ n = "s"; } }
而对于函数,解析器会率先读取函数声明,并使其在执行任何代码之前可用(可以访问);
至于函数表达式,则必须等到解析器执行到它所在的位置时,才会真正被解释执行。
虽然变量声明会提到执行上下文顶部,但如果声明之前就已经存在同名变量,则不会进行声明。如下
(function(a){ console.log(a); var a = 1;//因为预声明之前 该变量名已存在,所以不会进行重新声明 })(2)
7.事件处理不要放在页面上,不利用页面维护,建议将这些处理函数都封装在单独的js文件里(如果你用的是Knockout.js或者MVVM的其他框架,那就另说了)
8.在JS中可以使用try-catch来处理异常,但在我看来单纯用于捕获预料之外的错误,如果开发者足够严谨的话,try-catch是没有必要的;并且用的话也绝对不要在catch里什么也不做!!否则的话页面上出问题的时候你根本不知道是哪里出了问题。
推荐方法:
- 向用户简单的提示一些错误信息,如"您查找数据不存在"之类的。
- 什么也不显示,但是要将真正的错误信息及发生地点存入一个变量或者隐藏控件。
9. Js文件的延迟加载。
因为Web页面的资源都需要从远程服务器获取,所以经常有网速慢而造成页面显示迟缓的问题。这主要就是因为文件的下载占用了页面显示的线程
解决方法有两种
1:将文件的加载放到DOM加载之后,即body的结束位置。
<html> <body> <h1>Page is loading</h1> ...... ...... <script src = "xx.js"></script> </body> </html>
2:给script标签添加异步加载的属性
<script src="xx.js" defer async="true" ></script>
其中 defer是为了兼容IE的。
10.绝对路径(Web应用根目录) : "/";例如
<script src="/Scripts/common.js"></script>