最近又有拿着javascript教程再看一遍了,以为发现基础方面自己还是很薄弱啊,好了废话不多说,自我娱乐向的笔记开始,以后会不定期更新,有和我一样的小菜鸡可以一起学习下了,大神求指教
1.Undefined数据类型(只有定义的变量未初始化才会是值为undefined,未定义的变量是没有值的,读取未定义变量的值会报错)
javascript有一个特殊的数据类型——undefined,这个类型只有一个值,就是undefined,在使用var但是没有对其初始化的话就是这个值。也就是说
var message; alert(message); alert(message2);
这么做的话,执行到alert(message2)的时候就会报错,这里大家都很好理解,因为message2未定义嘛,但是
1 alert(typeof message); 2 alert(typeof message2);
这样的话两个alert执行之后都是undefined,不会报错!!以前我一直搞混,以为未定义的变量就是undefined,其实是只有定义的变量才回有自己的值。不过typeof 的值是undefined也有其一定的合理性,毕竟字面意思解释好像过得去、、、
2.Null数据类型
另一个和undefined类型类似的数据类型就是null了,严格来说undefined是由null派生出来的,所以
alert(null == undefined);
的返回值是true,但是相对于undefined而言,null是特指一个空指针,用作于空对象上,换句话说,只要是一个用来保存对象的变量却还没有真正保存对象的变量都应该明确的让变量保存null值
3.浮点数计算
javascript的浮点数是按照IEEE754标准存储的,不可避免计算的时候就会有误差,所以千万不要干
if (a + b == 0.2) { alert("true") } else { alert("false"); }
这种傻事,以为当a=0.1,b=0.2的时候这个返回值是false,而a=0.15,b=0.15的时候返回值是true,js浮点数计算都是会有误差的,所以不要试图测试特定的浮点数值
4.NaN不和任何一个数相等,包括NaN本身
5.parseInt()转换解析和浏览器的js引擎有关
alert(parseInt("070"));
在ie6-8之中,返回的是56(ECMAScript 3版本引擎)按照8进制解析,然后返回十进制的数(如果超出8进制范围则按十进制转换)
在ie9-10和chrome,firefox的话就是70(ECMAScript 5版本引擎)直接按照10进制解析,前导0被忽略(如果0x开头将依旧以16进制解析)
6.函数传递参数存储在argument对象之中
argument对象是javascript访问函数变量的一个对象(不是数组,但是变量存储所在的数组是通过这个对象访问)在普通模式下参数是和argument[]一一对应的(改变一个另一个也改变,但是是不是统一内存不确定)
(function addex(num1, num2) { num1 = 10; arguments[1] = 10; var result = arguments[0] +num2; alert(result); }(0,0));
返回值为20,可以在这种模式下直接对argument操作并且会影响到参数值,但是在严格模式下(需要浏览器支持)
"use strict"; (function addex(num1, num2) { num1 = 10; arguments[1] = 10; var result = arguments[0] +num2; alert(result); }(0,0));
返回值是0,不会有对应关系,这点需要注意。
7.基本数据类型没有array
javascript基本数据类型为null,undefined,number,string,boolean,object,只有这六种,而在javascript里面出现的任何东西除了前面五种类型之外都是对象,包括function和array,他们分别为new Function()和new Array()的实例