1.Javascript组成
ECMAScript:通过ECMA-262标准化的脚本程序设计语言,扮演人与计算机之间翻译的角色,提供JS基本功能。一般叫解释器。
DOM:document object model,赋予JS操作HTML的能力
BOM:Browser object model,浏览器对象模型,跟浏览器相关的操作window
ECMA简单,几乎没有兼容性问题;DOM兼容性一般;BOM完全不兼容
2.变量类型
number,string,boolean,function,object,undefined
变量本身没有类型,关键是赋予它什么;可以通过typeof查找
<script>
var a=12;
// alert(typeof a);//number
var b='abcd';
//alert(typeof b);//string
var c=true;
//alert(typeof c);//boolean
var d=function(){};
//alert(typeof d);//function
var e=document;
//alert(typeof e);//object
var f;
//alert(typeof f);//undefined
</script>
一个变量应该只存放一种类型的数据;
显式类型转换,如加法:字符串转数字——a是数字需要与别的相加时, parseInt(a);(一遇到非数字字符则停止;结果是整数;
如果都不是数字,则出现NaN-Not a number)parseFloat(a)转小数;
小程序——秒转时间:`var s=133;alert(parseInt(s/60)+'分'+s%60+'秒');`
关于NaN:NaN与NaN不相等;判断是否是NaN:函数isNaN(a),结果为1或0;
(计算机加号的作用:数字相加、字符串连接)
3.变量的作用域和闭包
全局变量:定义在函数之外
局部变量:只能在定义它的函数内部使用
闭包:闭包是可以包含自由(未绑定到特定对象)变量的代码块,这些变量是在定义代码块的环境中定义(局部变量),简单来说就是:
子函数可以使用父函数的局部变量
1,闭包外层是个函数.
2,闭包内部都有函数.
3,闭包会return内部函数.
4,闭包返回的函数内部不能有return.(因为这样就真的结束了)
5,执行闭包后,闭包内部变量会存在,而闭包内部函数的内部变量不会存在.
闭包的应用场景
1、保护函数内的变量安全。以最开始的例子为例,函数aaa中a只有函数bbb才能访问,而无法通过其他途径访问到,因此保护了a的安全性。
2、在内存中维持一个变量。依然如前例,由于闭包,函数aaa中a的一直存在于内存中
<script>
function aaa(){ //父函数
var a=12;
function bbb(){ //子函数
alert(a);
}
bbb();
}
</script>
4.变量命名规范
类型前缀+首字母大写(函数只首字母大写就可以)
5.switch
类似于if,当判断多个条件时常用switch。
switch(var){
case 值1:
语句1; break;
case 值2:
语句2; break;
default:
语句n;
}
6.三目运算符
条件?语句1:语句2;
a%2==0?alert('双数'):alert('单数');
7.if 里的真假
真:true,非0数字,非空字符串,空格,document,数组(非空对象)
假:false,0,NaN,空字符串,null(空对象),undefined
8.字符串方法:
(1)charAt()方法可返回指定位置的字符。返回的字符是长度为 1 的字符串。
语法:stringObject.charAt(index)
注意:1.字符串中第一个字符的下标是 0。最后一个字符的下标为字符串长度减一(stringObject.length-1)。
2.如果参数 index 不在 0 与 stringObject.length-1 之间,该方法将返回一个空字符串。
3.一个空格也算一个字符。
(2)split() 方法将字符串分割为字符串数组,并返回此数组。
语法:stringObject.split(separator,limit) separator指定的地方分割,常见的有“.”,"-"," "(每个字符都分割),limit分割次数
(3)substring() 方法用于提取字符串中介于两个指定下标之间的字符。
语法:stringObject.substring(starPos,stopPos) 开始的位置和结束的位置
var mystr="Hello World!"
document.write(mystr.substring(6) + "<br />");//World!
document.write(mystr.substring(0,5));//Hello
(4)substr() 方法从字符串中提取从 startPos位置开始的指定数目的字符串。
语法:stringObject.substr(startPos,length)
9.Json(重要)
JSON的全称是”JavaScript Object Notation”,意思是JavaScript对象表示法,它是一种基于文本,独立于语言的轻量级数据交换格式,用来存储数据。
语法规则:数据在键值对中;数据由逗号分隔
花括号保存对象;方括号保存数组
名称/值对:key1:value1,
var obj = {
1: "value1",
"2": "value2",
count: 3,
person: [ //数组结构JSON对象,可以嵌套使用
{
id: 1,
name: "张三"
},
{
id: 2,
name: "李四"
}
],
object: { //对象结构JSON对象
id: 1,
msg: "对象里的对象"
}
};
从JSON中读数据:
function ReadJSON() {
alert(obj.person[0].name); //或者alert(obj.person[0] ["name"])
alert(obj.object.msg); //或者alert(obj.object["msg"])
}
向JSON中写数据:
function Add() {
//往JSON对象中增加了一条记录
obj.sex= "男" //或者obj["sex"]="男"
}
修改JSON中的数据:
function Update() {
obj.count = 10; //或obj["count"]=10
}
注意:JSON没有length,实现Json循环的方法(数组的第二种循环方法),只JSON用这个循环方法:
for(var i in person)
{
aler('第'+i+'个东西'+person[i]);
}
10.访问对象属性的点表示法和方括号表示法
alert(person.name);
alert(person["name"]);
方括号语法的主要优点是可以通过变量来访问属性,以及属性名中包含会导致语法错误的字符比如空格:
var pName="name";
alert(person[pName]);//相当于person["name"]
通常,除非必须使用变量来访问属性,否则我们建议用点表示法
深入Javascript
1.函数返回值return
函数返回值一次只能返回一个;
一个函数尽量只返回一种类型的值;
a=2,b=3时 return a+b 就是5;
2.函数传参
arguments:可变参、不定参,储存参数的数组
<script>
function sum(){ // 例一:求和
alert(arguments.length);
alert(arguments[0]);
var result=0;
for(var i=0;i<arguments.length;i++)
{
result+=arguments[i];
}
}
alert(sum(12,4,5));
</script>
<script> //css函数
function css(object,name,value)
{
if(arguments.length==2)
{return object.sytle[name];}
if(arguments.length==3)
{obj.style[name]=value;}
}
window.onload=function(){
var oDiv=documents.getElementsById('div1')
alert(css(oDiv,'width'));
css(oDiv,'background','green');
}
</script>
3.获取非行间样式
只能获取样式,不能设置样式。
<style>
#div1 {width:200px;heigth:200px;}
<style>
<script> //获取非行间样式
window.onload=fuction(){
var oDiv=document.getElementById('div1');
//alert(oDiv.currentStyle.width); //只兼容IE
//alert(getComputedStyle(oDiv,null).width);//Chrom,FF,IE下不支持
if (oDiv.currentStyle){alert(oDiv.currentStyle.width);}
else{alert(getComputedStyle(oDiv,null).width);}
}
</script>
封装成函数包:
<script>
function getStyle(obj,name){
if(obj.currentStyle)
{
return obj.currentStyle[name];
}
else {
return getComputedStyle(obj,null)[name];}
}
</script>
注意单一样式(width,height)和复合样式(background,margin),复合样式要写出特定样式(background-color)。
4.数组基础
数组的属性:length,既可以获取又可以设置,如清空数组:将length设置为0;
数组的添加和删除:push()在数组的末尾添加;pop()在尾部删除、shift()删除头部;unshift()从头部添加;splice从中间添加或删除。
splice删除:splice(起点,长度);splice添加:splice(起点,长度,元素);替换,先删除后添加
var arr=[1,2,3,4,5,6];
//arr.splice(2,3); //起点是下标为2的元素是3,arr=[1,2,6]
//arr.splice(2,0,'a','b','c');//在下标为2的元素插入arr=[1,2,'a','b','c',3,4,5,6]
arr.splice(2,2,'a','b');//arr=[1,2,'a','b',5,6]
数组链接concat:a.concat(b);
连接数组元素join:arr.join('符号');AJAX链接网址
数组排序sort:只认识字符串,sort(), 如果是数字:
arr.sort(function(n1,n2){
retun n1-n2;
});
5.数值转换
有3个函数可以把非数值的转换为数值:Number(),parseInt(),和parseFloat()
Number()可以用于任何数据类型,而另外两个函数专门把字符串转换成数值
Number()函数的转换规则如下:
(1)Boolean值true、false分别转换为1,0
(2)数字值知识简单传入,返回
(3)null,返回0
(4)undefined返回NaN
(5)字符串:
只包含数字,则将其转换为十进制数值,前导零会忽略
字符串中浮点格式,则将其转换为对应的浮点数值
字符中包含有效的16进制,将其转换为相同大小的十进制
如果字符串是空“”,则返回0
如果字符串含上述格式外的字符,返回NaN
(6)如果是对象,则调用对象的valueOf()方法,然后按照前面规则返回,如果转换的结果是NaN,则调用toString()的方法,然后再依次按照字符串返回规则
由于Number()函数在转换字符串的适合比较复杂,多用parseInt()函数。
parseInt()函数忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不是数字字符或者负号, parseInt()就会返回NaN。
如果第一个字符是数字,会继续解析第二个字符,直到遇到非数字字符。浮点型的小数点并不是有效的数字字符,所以浮点型会保留整数部分
注意:ECMAscript5 Javascript引擎中,parseInt()不具有解析八进制的能力,前导零会认为无效。ECMAscript3Javascript就可以
为了消除parseInt()可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(即多少进制)
var num=parseInt("0xAF",16);//175
parseFloat()只解析十进制,前导零会忽略,并且字符串中的第一个小数点是有效的。
6.for-in语句
语法:for(property in expression) statement
for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。
for(var propName in window){
document.write(propName);
}
建议在使用for-in循环之前,先检测确认该对象的值是不是null或undefined
var num=0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i==)
}
}