javascript随手记
编码规范
写在所有函数外面的变量就是全局变量。
之所以要避免使用全局变量是因为:如果有多个类库的话,它们都定义了一个名字的变量。这时候后引入的类库中该变量的值就会覆盖前面引入的类库中该同名变量的功能。
解决方案
1、对于需要立即执行的,使用匿名函数并立即执行。
(function(){
var test = "hello, world!";
alert(test);
}());
这里注意:该匿名函数外面的括号以及最后的分号不能忘了!
2、对于不用立即执行的,直接封装到函数里面即可。
for (var i=0, max=arr.length; i<max; i++){
//......
}
这样的话,就不必每次循环都去读取数组arr的长度了。
一种更优雅的循环技法:
var arr = [1,5,2,7,9,3];
i = arr.length;
while (i--) {
alert(arr[i]);
}
这样做的好处是:
1、代码更为精简,并且使用到了单var技法,代码显得更 优雅。
2、和上一种技法相比,它同样存储了要循环的数组的长度,不必每次循环都去遍历数组对象。
3、每次都和零比较,提高代码的运行效率。
但是,这种写法JSLint不推荐。我个人认为代码风格其实就是在 效率、可读性、是否优雅 此三者之间做一个妥协取舍。那么具体应该怎么做也就见仁见智了。
1、构造函数使用大驼峰camel命名法。即所有单词的首字母大写。
2、一般函数和方法使用小驼峰camel命名法。即除第一个单词的首字母小写之外,其它单词首字母大写。
3、其它诸如局部变量所有单词之间使用下划线分隔,所有字母小写。
javascript中的数据类型
个人觉得这是一个非常混乱的问题,为什么这么说呢?
观点一:说javascript的数据类型包括:5种简单数据类型和1种复杂数据类型。
number、string、boolean、null、undefined五种简单数据类型
剩下的都属于object这一复杂数据类型,包括数组、函数、正则表达式等等。
观点二:说javascript的数据类型包括:6种数据类型。
number、string、boolean、undefined、function、object
观点三:一切皆是对象,啧啧,牛X吧。
观点一:是根据数据类型的可变或者不可变来进行区分归类的。
可变的类型划分到简单数据类型。
不可变的类型划分到复杂数据类型。
看下面一段js代码:
var s = "tt";
var s2 = s;
s = "dd";
alert(s); //dd
alert(s2); //tt
这说明,string是不可变的,所以它是5种简单数据类型的一种。
既然在5种简单数据类型中看到了null和undefined,那NaN又是什么呢?NaN表示该变量非数字。可以使用isNaN()函数来判断。
使用typeof来判断会发现它的类型是number。而number本身自然是不可变的,所以也就没有必要将它单独列到5种简单数据类型中去了。
对于这种观点来说,什么是对象?对象就是可变的键控集合。
观点二:是根据javascript的内置typeof关键字做出的结论。
你会发现使用typeof关键字只能得到六种数据类型:number、string、boolean、object、function、ubdefined。
而null的类型是object,NaN的类型是number,undefined的类型就是undefined。
String、Number、Boolean(注意首字母是大写),它们是string、number、boolean这三个类型的包装对象,属于object类型。
观点三:这个比较粗犷,得出的结论估计来源两点:
1、有方法的东东就是对象。
2、与javascript和java的关系有异曲同工之妙。
其实,本来就无所谓对错之分,只不过是分类依据不同罢了。
正如同如果根据颜色来分:白马、白鸡、白人是一类;黑马、黑鸡、黑人是一类。
如果根据种族来分:马、鸡、人各是一类。
对于观点一中的可变和不可变类型,有必要详细说说。
这个就要先搞清楚计算机中栈和堆的关系了。
我们先来看看总共有哪些类型吧:number、string、boolean、null、undefined、object。
1、其中,object在栈上存放着变量的地址,在堆上存放着真正的值。所以它是可变的。
2、另外一些值类型的数据则是存放在栈上,变量之间的复制存放的是一份新的拷贝,它们是不可变的。
3、对于string来说,比较特殊。它虽然也是将地址存放在栈中,将真正的值存放在堆中。但是它却是不可变的。这是为什么呢?看下面的代码:
var s = "tt";
var s2 = s;
s = "dd";
alert(s); //dd
alert(s2); //tt
其实一开始为变量s赋值为"tt"的时候,会在堆中开辟一块内存空间。
为s2赋值为s的时候,其实是将变量s在栈中存放的地址赋给了它。也就是说s2和s在栈中得值是一样的,它们都是一个地址,都指向堆中得一块内存空间,而那块内存空间中存放的就是"tt"。
当为s重新赋值为"dd"的时候,注意这里就是string类型特殊的地方了。它会先到堆中去看有不有现成的数据"dd",如果有的话就将该数据的地址赋值给s,如果没有就重新开辟一块内存空间并赋值为"dd",最后将这块新开辟的内存空间的地址赋值给s。
所以这时候s和s2在栈中的值已经不一样了。它们分别指向堆中不同的内存空间。
而改变了变量s,结果却并没有改变变量s2,所以说它是不可变的。
所以在有些时候也会把string字符串类型称作不可变对象。
这里对象的意义指的是真正的值存放在堆中的变量。
javascript随手记的更多相关文章
- 复习JavaScript随手记
数据类型 基本类型 string number boolean undefined number类型,包含整数浮点数 NaN和自己都不相等,涉及NaN的计算结果都是NaN isNaN()函数用于判断一 ...
- JavaScript技巧手冊
js小技巧 每一项都是js中的小技巧,但十分的有用! 1.document.write(""); 输出语句 2.JS中的凝视为// 3.传统的HTML文档顺序是:documen ...
- JavaScript的个人学习随手记(三)
JavaScript Window - 浏览器对象模型 Window 对象 以下window对象时使用均可省略window 所有浏览器都支持 window 对象.它表示浏览器窗口. 所有 JavaSc ...
- JavaScript的个人学习随手记(二)
JS HTML DOM 改变 HTML 输出流 JavaScript 能够创建动态的 HTML 内容: 今天的日期是: Sat Sep 24 2016 15:06:50 GMT+0800 (中国标准时 ...
- JavaScript的个人学习随手记(一)
JavaScript 简介 要学习的人可以到W3School http://www.w3school.com.cn/b.asp JavaScript 是世界上最流行的编程语言. 这门语言可用于 HT ...
- 发发关于JavaScript的感慨,随手记几个js知识碎片
最近一段时间写了很多JavaScript和jquery代码,越来越感觉js基础不牢固,写一句查半天,有时间肯定要系统的学一下. 不说了,先记一下最近学到的点东西,省的以后没时间系统学js还要再来查. ...
- 【javascript】随手记代码
//js实现的当前界面的刷新.前进.后退 <input type="button" value="刷新" onclick="window.loc ...
- Javascript手记-垃圾收集
如果有人问.net的垃圾回收,大家会马上想到gc,那如果有人问你javascript如何进行内存管理的呢?挠挠头,一口香瓜,听我细细道来! javascript具有自动垃圾收集机制,执行环境会负责管理 ...
- Javascript手记-执行环境和作用域
执行环境是javascript一个重要的概念,执行环境定义了变量有权访问其他数据决定了他们各自的行为,每个执行环境 都有一个与之关联的变量,环境中定义的所有变量和函数都保存在这个对象中,虽然我们编写的 ...
随机推荐
- Linux学习之路:shell变量(一)
一.变量的显示与设置 1.变量的显示运用echo命令 +$符号: 上图例子显示的是系统变量,咱们可以自己设置变量 2.设置变量运用“=”符号 设置了变量NIU 值为“niunai” 变量设置规则: ( ...
- 远程通信Socket
网络通信高性能的三个主题: 1) 传输:用什么样的通道将数据发送给对方,BIO.NIO或者AIO,IO模型在很大程度上决定了框架的性能: 2) 协议:采用什么样的通信协议,HTTP或者内部私有协议.协 ...
- Redis主备自动切换
Sentinel(哨兵)是用于监控redis集群中Master状态的工具. 一.Sentinel作用 1.Master状态检测 2.如果Master异常,则会进行Master-Slave切换,将 ...
- HTML5与CSS3基础教程第八版学习笔记1~6章
第一章,网页的构造块 网页主要包括三个部分: 1.文本内容(纯文字) 2.对其他文件的引用:图像,音频,视频,样式表文件,js文件 3.标记:对文本内容进行描述并确保引用正确地工作 注:所有这些成分都 ...
- css扁平化博客学习总结(二)css样式重置
css样式重置 方法一:不推荐使用,这么写会让网页解析速度变慢. *{ margin: 0; padding: 0;} 方法二:大家常用的写法,比较流行. body, html, div, block ...
- JAXB - Annotations, Annotations for Enums: XmlEnum, XmlEnumValue
An enum type is annotated with XmlEnum. It has an optional element value of type java.lang.Class whi ...
- Spring分布式事务实现(适用于spring-tx 2.5)
http://log-cd.iteye.com/blog/807607 分布式事务是指操作多个数据库之间的事务,spring的org.springframework.transaction.jta.J ...
- java反射温习一下
public class LoveReflect { public static class Demo implements Serializable{ } public static void ma ...
- SQL Server 错误检测与修复
简介 在一个理想的世界中,不会存在任何数据库的损坏,就像我们不会将一些严重意外情况列入我们生活中的日常一样,而一旦这类事情发生,一定会对我们的生活造成非常显著的影响,在SQL Server中也同样如此 ...
- Open Flash Chart在php中的使用教程
http://www.cnblogs.com/huangcong/archive/2013/01/27/2878650.html 为了画一个漂亮的表格,我从网上找到了OpenFlashChart(of ...