Javacript 基础
Javascript 组成
Ecmascript –> 解释器 这里基本没有兼容性问题
DOM –> document 有一些可以解决的兼容性问题
BOM -> window 用的比较少
处理浏览器窗口与框架
Javascript变量类型
Javascript 的变量相当于一个杯子,它的类型由杯子里装的内容决定,如装酒是酒杯装水是水杯
Typeof 运算符
number ->不区分整数 小数等
string Boolean
object 对象是复合类型
function
undefined -> 1.真的没有定义2 虽然定义了,但是没有给值
四种基本类型 number string Boolean undefined
一个变量应该只存放一种类型的数据
Document.getElementsByName() 仅支持Input标签中的name属性
Var time = SetInterval("alert()",1000) 定时
ClearInterval(time) 清除定时
setTimeout("alert('a')",1000);
数据类型转换
显示类型转换
parseInt() //从字符串中提取前面的数字
//NaN Not A Number 一个标记,不是数字 NaN 标记不能进行比较,它和自己本身都不相等,用 isNaN()函数来检测
parseFloat() //提取一个小数
隐式类型转换
var a=12;var b='12'
alert(a==b) //true 先把ab转换成相同的类型,然后比较,类似的!=
alert(a===b) //不转换,直接比较 类似的!==
alert(a - / *
b) //输出0 私下转换了
alert(a+b) //输出1212 私下转换了 加号用途: 1、字符串连接 2、数字相加 其他符号只有数字运算用途
变量作用域
局部变量:定义在函数中,仅在本函数中可以使用
全局变量:函数外部,尽量少用
闭包:父函数的局部变量子函数可以使用
function father()
var a = 1;
function son() {
alert(a);
}
son();
}
father();
命名
匈牙利命名法:类型前缀+首字母大写 如:var fNum1 = 0.3; var iNum2 = 2; var sStr1 = '2313'; var oBtn = documnent.get…
运算
三目运算: 条件?语句1 : 语句2
真:true 、 非0的数、 非空字符串、非空对象
假:false 、数字0 、 空字符串、null(空对象)、undefined
HTML元素的常用属性
CurrentStyle 获取css修饰后最终的样式, style属性仅能获得行内式。但是currentstyle仅能在ie下来用,非ie下通过getComputedStyle(元素,false);
修改时都可用style属性
兼容解决方案
function getStyle(obj,attr) {
return obj.currentStyle?obj.currentStyle[attr]:getComputedStyle(obj,false).width;
}
className
规定元素的 class 属性。注意:该属性名不是 "class",因为 "class" 是 JavaScript 中的保留字
offsetHeight, offsetWidth (包括了width+padding+border)
返回元素的高度和宽度,以像素为单位。这是非标准的但却得到很好支持的属性。类型:int。状态:只读。
offsetLeft
返回当前元素的左边界到它的包含元素(指的是position不为static的元素)的左边界的偏移量,以像素为单位。类型:int。状态:只读。
offsetTop
返回当前元素的上边界到它的包含元素的上边界的偏移量,以像素为单位。类型:int。状态:只读。
innerHTML
规定了元素所包含的字符串,不包括元素自身的开始标记和结束标记
Json
Var obj = {a:1 , b:'abc', c:[1,2,3,4]}; alert(obj.b); 等同于 obj['b']
var obj = [{a:5,b:'abc'}, {a:2,b:5}]; alert(obj[1].a); //数组json
json for in
var obj = {a:12, b:'abc', c:23};
var key;
for(key in obj) {
alert(obj[key]);
}
函数
可变参arguments[] 传入函数的参数数组
利用可变参数,通过判断参数个数,模拟函数重载。
数组
两种定义方式:
1. var arr = [1,2,3,4];
2 var arr = new Array(1,2,3,4)
数组的length可以修改,该短了截去,改长了增加的元素都是undefined
快速清空数组 arr.length=0;
5. 排序arrayObject.sort (function f(num1,num2) {return num1-num2;}) 要添加以个比较函数,类似于c的qsort
7. 字符串转属组 var str = "1-2-3-4-5" var arr = string.split('-') ; // 返回的是一个字符串数组
DOM
- 末尾增加元素 obj.appendChild(newObj); 可向节点的子节点列表的末尾添加新的子节点
- 子节点之前插入节点 target.insertBefore(newChild,existingChild) //The insertBefore() method inserts a new child node before an existing child node.
- 删除子节点 target.removeChild(existingChild); existingChild 必须是target的子节点!常常借助parentNode属性
- 文档碎片(容器) document.createDocumentFragment () 理论上
- childNodes和nodeType
childNodes有兼容系问题,在火狐下包括文本节点,而ie下不包括 。
nodeType值: 1->Element 3 –>Text
if(nodeType == 1) do… else {do …}
- children 兼容版的childNodes 代替childNodes 各种浏览器完美支持children属性
- parentNode 当前节点的父节点
- offsetParent 返回当前元素用来定位的父节点,即祖先元素中position不是static的
- firstChild(IE) firstElementChild(firefox) 火狐中firstChid可能返回文字 firstElementChild返回元素,兼容方案如下:
类似的 :
lastChild lastElementChild(仅火狐支持)
perviousSibing(IE) perviousElementSibing(firefox)
nextSibing(IE) nextElementSibing(firefox)
BOM
- window.open('http://baidu.com','_self'); //返回新打开的窗口
- window.close() //关闭窗口,firefox不能关闭非脚本创建的窗口
- userAgent 浏览器信息属性
- window.location 加载网页地址,可以做跳转
- window.conform() 确认取消对话框
- window.alert();
- window.prompt(); 提示用户输入信息
String 类的方法
- str.charAt(position);
- str.charCodeAt(position); 字符->编码 (javascript 统一使用utf-8编码)
- String.fromCharCode(num) 编码->字符
- str. indexOf(searchvalue,fromindex) //返回字符或者字符串第一次出现的位置 注意:区分大小写
- str.lastIndexOf(searchvalue,fromindex) //字符串最后出现的位置
- str.search( reg) 正则
- stringObject.replace(regexp,replacement) 正则
- str.localeCompare(target) //按照当地习惯进行字符串比较,如中国按照拼音先后来比
- stringObject.slice(start,end); slice(start) 负数会变成截取倒数第几个,这是和substring的区别
- slice substring substr
- stringObject.split(separator,howmany); 返回一个数组,第二个参数是数组长度,可选