PPK谈JS笔记第一弹
以下内容是读书笔记,再一次温习JS好书:PPK谈JS
window.load=initializePage
addEventSimple('window','load',function(){})
load事件在页面被完成加载时触发,显然这正是我们初始化脚本所需要的。
问题是如果同时批量初始化,可能会发生替换,最后的赋值会替换前面的。
js
变量名,方法名等区分大小写
使用分号作为语句分隔符
注释是// /**/
代码块使用{}
undefined null
undefined:
你访问了一个对象不存在的属性或方法,
你访问一个没有赋值的变量
显示对象的数据类型:typeof
NaN not a number 表示非数字值
发生在试图把一个非数字的对象(字符串)转为转成数字的时候
JS处理字符串连接的优先级高于数学求和。
= == ===
== 比较运算符 返回布尔值 true or false
if(4)...
除了0和NaN之外的其他数字都转化为了true
=== 严格比较运算符
要求比较的两个对象值相等,数据类型也相同时才返回true
== 表示两个对象的值相等,数据类型可能不相同,如一个是数字一个是字符串
==== 表示丙个对象的是否是同一个, 要求数据类型相同,而且值也相同
变量就是保存值的容器
JS开发中习惯以驼峰命名格式来命名较长的变量或函数名,因为这样更容易阅读。
名字以小写字符开头,但是接着每一个新单词的首字母都使用大写。
W3C DOM使用相同的命名约定,如getElementById/TagName
优秀的编程实践是尽可能地使用局部变量,这样可以防止变量之间相互干扰。即使他们拥有相同的名字。
在函数体中使用VAR来声明变量,或者作为参数变量在函数定义中出现的变量都是局部变量,
其他的任何方式声明的变量都是全局变量。
局部变量和全局变量的优先级呢?在函数中,局部变量的优先级高于全局变量
注意在JS中小数的运算有精度有问题,请注意,如简单的2.1*3并不是6.6,而是还有后缀,
所以需要使用(2.1*3).toFixed(1))来将数字转为拥有固定小数位数的字符串。
使用Math.round() Math.floor() Math.random 生成一个0到1之间的随机数。
parseInt(3 +'abc')
parseFloat(3.65 +'abc')
会返回合法的数字值,有一定的用途
字符串属性
indexOf 如果查找不到,返回-1,如果找到,返回的是其出现的位置,从0开始算起。
var evtTarget=evt.target ||evt.srcElement;
如果evt.target存在,JS发现第一个表达式的值是真,则不计算后面的,返回的就是evt.target对象。
不是布尔true.
var test = new Object();
test.a=2;
test.b='2';
test.c=function(){console.log(test.a*test.b);}
test.c()
var test2 = {
a:2,
b:'2',
c:function(){
console.log(this.a*this.b);
}
}
this它总是引用定义该方法的对象。
客户端(浏览器中)使用window作为全局对象,而全局变量就是定义在window上的属性。
object.property
object['property']
是等价的,property替换成method也是同样的效果。
关联数组
var arr=new Object();
arr["name"]="student";
arr["age"]=20;
arr["sex"]="male";
console.log(arr);
for (var item in arr){
console.log(item)
}
数组
var a1=[];
a1.push(1);
a1.push(2);
console.log(a1)
console.log(a1.pop())
数组有push,pop,shift and unshift 四个方法,前两个是从尾部对数组元素进行增删,后两个是从头部进行相同的操作。