初学javascript所记的笔记
2016-11-25 11:19
218 查看
JavaScript语言本身和java语言没有任何关系
JavaScript实现
JavaScript的核心ECMAscript描述了该语言的语法和基本对象。
DOM描述了处理网页内容的方法和接口。
BOM描述了与浏览器进行交互的方法和接口。
一个完整的javascript实现是由 ECMAScript DOM BOM 3个不同部分组成的
JavaScript重要的学习五点
1、基础语法 ECMAScript
2、数组,函数,对象
3、DOM 动态的改变文本流
4、BOM
5、AJAX
javascript构成简说
ecmascript描述了以下内容:语法,类型,语句,关键字,保留字,运算符,对象
DOM描述以下内容:对文档的操作
DOM 视图-描述跟踪文档的各种视图(即css样式化之前和css样式化之后的文档)
DOM 事件-描述事件的接口
DOM 样式-描述处理基于CSS样式的接口
DOM 遍历和范围-描述遍历和操作文档树的接口
BOM大概描述一下内容: 对浏览器的操作
BOM主要处理浏览器窗口和框架,不过通常浏览器特定的javascript扩展都被看做BOM的一部分。这些扩展包括:
弹出新的浏览器窗口
移动、关闭浏览器窗口以及调整窗口大小
提供web浏览器详细信息的定位对象
提供用户屏幕分辨率详细信息的屏幕对象
对cookie的支持
ie扩展了BOM,加入了ActiveXObject类,可以通过javascript实例化ActiveX对象
javascript特性
脚本编写 基于对象 简单 安全 动态 跨平台
javascript优缺点
1、javascript可以方便地操纵各种浏览器的对象,可以使用
2、javascript来
javascript注释方法//单行注释 /**/中间为多行注释
javascript代码 嵌入式 链接式 导入式 document.wirte()
嵌入式
<html>
<head>
<script language="javascript" type="text/javascript">
alert('HELLO')
</script>
</head>
<body>
</body>
</html>
链接式
<script type="text/javascript" src="js/1.js"></script> js支持改名的,只要把type写上,写成1.ttt都没问题
javascript常见提示框
1警告框
alert(内容)
2、确认框
confirm(内容)有确定 取消两个按键
3、会话框
prompt(内,容)内对应的是标题,容对应的框里面的默认值
javascript常用的转移字符
符号 代表意
\' '
\" "
\n 换行
\\ \
javascript变量申明
区别大小写,var 申明时赋值 定义 才可以弹出内容
1、在变量申明的时候无需指定类型
2、在申明变量的时候通过var 关键字
3、变量名字区分大小写
4、经常使用注释
var 变量名 = 变量值;
javascript变量命名规范
1、必须以字母、下划线和$开头
2、变量名命名要有意义,一般采用驼峰发
3、余下的字符可以是下划线、美元符号或任何的字母、数字
4、最长为255个字符
5、不能有空格,大小写敏感
6、不能使用javascript中的关键字或保留字命名
javascript变量类型
undefined-未定义类型 未被赋值的变量,值为undefined
null-空类型 值为null,尚不存在的对象
string-字符串类型 值用引号括起来
Boolean-布尔类型 值为true/false
number-数字类型 任何数字(数字类型包含nan,int,float,且所有数字类型均用64位浮点数格式表示,数组索引采用32位整数)
可以使用 typeof(object)来获取object的类型
javascript变量显式转换
类型转换
javascript是弱类型语言,变量的类型对应于其值得类型,可以对不同类型的变量执行运算,解释器强制转换数据类型,然后进行处理如:
运算 结果
数值与字符串相加 将数值强制转换为字符串
布尔值与字符串相加 将布尔值强制转换为字符串 (true或者false转成字符串)
数值与布尔值相加 将布尔值强制转换为数值 (布尔值当中的true转成1,false转成0)
NaN,null,undefined,‘’,0,‘false’在判定时自动转成false 上面6个值,null=undefined,NaN永远不和任何值相等,在数字或者字符串前面加上2个!!可转换成布尔值
强制转换方式 强转数字Number() 强转字符串String() 强转Boolean()转不对会显示NaN
javascript自定义函数
js函数介绍
(1)函数也是一段js代码,它自定义一次,单可能不执行或者调用任意次;
(2)函数可以有0个或者多个参数(形参和实参),同时支持一个返回值;
(3)函数即对象
(4)可以将函数赋值给变量,或者作为参数传递给其他函数,可以设置它们的属性,可以调用它们的方法;
函数定义
(1)使用单独定义
function 函数名(arg1,arg2,arg3......){
code
}
(2) 使用变量赋值
var fun=function(arg1,arg2,arg3......){
code
}
(3) 使用构造函数
var fun=New Function(arg1,arg2,arg3.....,code....)
同一种方式申明的函数如果重名后面会覆盖函数;
如果不同方式申明函数同名,则变量定义的方式优先;
javascript函数嵌套
function textFun(a,b){
function 函数名(a){return a*a;};
return 函数名(a)+函数名(b);
}
1,调用函数只需要使用 变量名();或者函数名();即可
2,使用函数嵌套必须要注意,在函数体内的函数(也就是嵌套函数),只能在父级函数内调用,不能在全局调用和其他函数中调用;
ruturn语句在同方法当中后面的语句都不会执行;把值当作当前方法的结果
document.write(“文本内容”)
javascript函数递归
function fact(num){
if(num<=1){
return 1;
} else{
return num*fact(num-1)
}
}
(fact(5)意思为5*4*3*2*1)
javascript全局变量和局部变量
1、全局变量,在函数体外申明就是全局变量,在函数内部可以使用
2、局部变量,在函数内部用var申明的变量就叫做局部变量;
var i=‘全局变量’
function test(){
var i=‘局部变量’;
alert(i);//输出局部变量
}
alert(i);输出全局变量
arguments 对象
arguments对象主要用于获取函数形参相关的信息,比如可以直接或许形参的值,获取形参的长度。获取当前函数
主要特性:
arguments[]
数组只在函数体内定义。在函数体内,arguments引用该函数的arguments对象。该对象有带编号的属性,并作为一个存放传递给函数的所有参数的数组。标识符arguments本质上是一个局部变量,在每个函数中都会被自动申明并初始化。它值在函数体重才能引用arguments对象,在全局代码中没有定义。
arguments.callee 单签正在运行的函数 调自己整个的
arguments.callee.length;函数自身参数个数(形参)
arguments.length 传递给函数的参数的个数(实参)外面的运行函数参数下午 2:27
javascript数组介绍
(1)数组(array)是数据的结合,在js中,数组是一种基本的数据类型,该数据类型是复合型,一个数组可以包含多个元素,且每个元素都可以是任何数据类型
(2)在js中数据并不支持多维数组,以及关联数组,但缺可以实现多维数组和关联数组的功能,这其实使用对象模拟来实现的;
delete 删除某一下标的值,键不会被删除
设置速度的长度,比如某个数据长度为两个值,设置length为1,则将第二个的值和键一起删除
删除 splice Array.splice(起始的下标,结束的下标) 删除下标为1的键和值(1,1,)返回数组
toString() 将数组转成字符串 返回字符串 对原数组无影响
join 自定义转字符串 可以修改分隔符 Array.join("-") 通过-分割 对原数组无影响
返回值不会分割二维的数组
数组链接 concat Array.concat(多个数组逗号隔开) 对原数组无影响,返回值为新组合数组
Array.pop()删除数组最后一个元素,并返回删除后的值
Array.shift() 删除数组的第一个元素,并返回删除后的值
Array.unshift()在数据的最前头添加一个值,并影响数值,返回修改后的值得个数
Array.push()和 unshift 一样,在最后增加值
Array.reverse()颠倒顺序 返回颠倒的数组,并对原数组影响
Array.sort() 排序 默认顺序:数字 》 字母 》汉字》undefined
Array.slice(开始,结束) 提取数组里面的值 包含起始位置的值,但不包括结束位置的值
Array.splice(起始的位置,结束的位置,替换的值)
运算符语句
+ 运算符 同类型直接运算, 不同则是链接符的作用
- * / %(取模) 强行将字符串转换成数字类型,进行运算,无法运算结果显示NaN
++
++i var a=i+1;
i++ var a=i; a+1;
例子 var a=10; a = i++ + i--; a的值为21;因为++ -- 的优先级比+ - 高
+= -= *= /= i+=1;意思为 i=i+1;
== 比较符 两边的值是否相等 返回布尔型
=== 比的是类型 再加上值;
>= <= >或者= <或者=
字符串比较 是比较的长度 字符串和数字比较 字符串转换成数字比较 无法相比较返回false
|| or 或 && and 并
var yy = 123;
var xx = 'xxx';
var ss = yy || xx;
如果第一个值转换为boolean 为true 则ss = yy;反之 则ss = xx;如果都是false;那应该就没值了吧
三维运算 Boolean ?运算一:运算二;如果Boolean为true 执行运算一,反之执行运算二
对比if if(boolean){运算一}else{运算二}
循环语句 for(var i=0;i<9;i++){运算语句}
while(boolean){运算语句}循环 如果Boolean成立 一直循环
do{运算语句}while(Boolean);按顺序,至少会执行一次运算语句,如果Boolean成立继续执行
switch(变量名){
case 1;
运算语句
break;
case 2;
运算语句
break;
case 2;
运算语句
continue;
default:
运算语句;
}
变量名为1时,执行第一条语句,continue为只是跳出本次循环,以后的还会循环;break为跳出循环,不写会继续往下循环,没有匹配到,则执行default;
for(var 变量 in Array){
运算语句
}
遍历,将数组的循环赋值给变量,直到循环到数组的最后一个值
delete 对象 删除成功返回 true;通过var 申明的对象无法删除
in 检查数组或者对象的下标或键是否存在
1 in Array 意为 Array中是否含有下标为1 的值;存在返回true;左边的操作数必须为一个可以成功转成字符串类型的值,右边必须为数组或者对象
javascript 对象
对象的概念
1、对象是一种复合型数据类型,可以讲很多数据集中在一个单元中,对象通过属性来获取数据集中的数据,也可以通过方法来实现数据的某些功能;
2、对象通常会使用很多变量来描述一些实物的属性,例如一个名为COLOR的变量,该变量有可能会用来描述一个东西的颜色,比如说笔的颜色,水桶的颜色等,如果一个程序里有多个实物,那么久有可能要用多个变量来描述这些实物的颜色;那么对象就是把这些看上去杂乱无序的变量按逻辑进行分类;
3、对象的值可以是任何类型;
4、对象是可以被继承;
创建对象
var obj = new Object();创建一个对象
var obj = {};json方式创建一个空对象
var obj = new Object('类型') 创建一个基于类型的对象
var arr = new Array();穿件一个数组对象
var str = new String();创建一个字符串对象
var bol = new boolean();创建一个布尔类型对象
var obj = {name:"muzhi",age:18,arr:[1,2,3],fun:function(){alert("xxx")}};
var obj = new test();//构造函数 申明时会自动触发
对象的废除和属性删除
删除对象属性 delete obj.name
清空整个对象 obj = null;
对象中的this的用法
this 谁调用谁this就是谁
call(对象,a,b,c)第一个必须是对象,而且是调用
常用对象
字符串常用对象
搜索字符串当中指定的字符串出现的位置
str.indexOf() 里面填写字符串,返回值为字符串所在的上一个位置,不存在返回-1
str.lastIndexOf() 是找到最后一个能和字符串里面的匹配的字符串的位置
str.search() 搜索 但是可以使用正则
str.replace() 第一个填写需要替换的内容,第二个填写换成的内容,返回替换后的字符串,如果不存在返回原字符串
str.match() 搜索到返回搜索的结果,搜索不到返回null 原字符串不变,前面的都不变
str.slice(3,4) 截取 第一个写开始但截取不包括的位置,第二个写结束位置,返回截取字符串,结束的位置字符串没这么长,截取到最后对原字符串无影响
str.substr() 截取 第一个写开始的但不包括位置, 第二个写截取的长度
str.substring()于slice相同
str.toString() 转换成字符串
str.contact() 字符串链接,括号内写链接的字符串,返回链接后的字符串,对原字符串无影响
str.length 返回字符串的长度
str.charAt() 括号内写一个数字 返回这个数字位置的字符
str.charCodeAt() 返回这个数字的编码
str.toLowerCase() 将字符串转换成小写
str.toUpperCase() 将字符串转化成大写
str..split("") 分割方法 按括号内的符号,将字符串分割成数组
判断a是否是数组 a instanceof Array 如果是 返回true
match 对象常用方法
Math.ceil(num) 有小数点 取整时 个位数加一位
math.floor(num) 取整 直接把小数点以后去除
如果是负数,它两个相反
Math.min(1,2,3) 取里面最小的数
Math.max(1,2,3) 取里面最大的数
Math.round(num) 四舍五入
Math.abs(num) 返回相反数
Number.MAX_VALUE 最大数值
Number.MIN_VALUE最小数值
Number.POSITIVE_INFINITY 正无穷大
Number.NEGATIVE_INFINITY 负无穷大
Number.toString() 将数字转换成字符串
时间
Js获取当前日期时间及其它操作
var myDate = new Date();
myDate.getYear(); //获取当前年份(2位)
myDate.getFullYear(); //获取完整的年份(4位,1970-????)
myDate.getMonth(); //获取当前月份(0-11,0代表1月)
myDate.getDate(); //获取当前日(1-31)
myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours(); //获取当前小时数(0-23)
myDate.getMinutes(); //获取当前分钟数(0-59)
myDate.getSeconds(); //获取当前秒数(0-59)
myDate.getMilliseconds(); //获取当前毫秒数(0-999)
myDate.toLocaleDateString(); //获取当前日期
var mytime=myDate.toLocaleTimeString(); //获取当前时间
myDate.toLocaleString( ); //获取日期与时间
js DOM 操作
一个对象 4种获取 7种关系
1、对元素的添删改查(标签)
2、对元素的属性的添删改查(html属性,css属性)
3、对元素所包含的内容的添删改查
节点
根据DOM,HTML文档中的每个成分都是一个节点
DOM是这样规定的:
整个文档是一个文档节点
每个HTML标签是一个元素节点
包含在HTML元素中的文本是文本节点
每一个HTML属性是一个属性节点
注释属于注释节点
节点信息分类
每个节点都拥有包含着关于节点某些信息的属性。这些属性是:
nodeName(节点名称)
nodeValue(节点值)
nodeType(节点类型)
元素节点的nodeName 是标签名称
属性节点的nodeName 是属性名称
文本节点的nodeName 永远是#text
文档节点的nodeName 永远是#document
注释:nodeName 所包含的xml 元素的标签名称永远是大写的
节点标示符
nodeValue
对于文本节点,nodeValue属性包含文本。
对于属性节点,nodeValue属性包含属性值。
nodeValue属性对于文档节点和元素节点是不可用的。
nodeType
nodeType属性可返回节点的类型
最重要的节点类型是:
元素类型 节点类型
标签 1
属性 2
文本 3
注释 8
文档 9
空格 换行 也算一个节点
四项获取
1、getElementById();
获取Id为什么的节点;(Id 中的一种选择器,有且为一)获取一个对象
document.getElementById("id名");
在script标签中加入defer=“defer” 等同于把标签放在了html底部
在火狐谷歌里面用obj.textContent来获取元素节点的内容
2、document.getElementsByTagName("");
通过标签名字来获取,注意是个复数。访问哪一个需要按数组的形式访问,即使只有一个,也要用复数形式
如:document.getElementsByTagName("p")[0];或者赋值变量 obj[0]
3、document.getElementsByName();
用法同第二个,但是这个是获取含有name的元素节点
3、document.getElementsByClassName();
也是复数,用法同第二个,通过class获取,ie的9以上支持
创建节点
1、第一种方法,先把节点放到内存,然后通过变量使用
var 变量名 = document.createElement("div");//创建标签 内容为<div></div>
var 变量名 = document.createTextNode("创建文本节点,这里写文本内容");
2、添加节点
父节点.appendChild(变量名);在某个节点中添加一个节点,返回新节点引用
父节点.insertBefore(变量名,位置);默认最后面添加 比append多了一个功能,选择位置,节点名.firstChild 是第一个子元素前面,返回新节点引用
克隆 var 变量名 = 节点名.cloneNode(); 括号里面加true 为复制标签内所有内容全部复制 不加只复制标签
光克隆没有意义,只是放到内存里面,然后还需要把变量添加到某个地方
节点获取
引用子节点 elementName(节点名)
elementName.childNodes
elementName 节点下所有子节点数组
elementName.firstChild
elementName下的第一个节点
elementName.lastChild
elementName下的最后一个子节点
引用父节点
elementName.parentNode elementName节点的父节点
elementName.parentElement elementName节点的父元素(IE)
因为 空格 换行 也算一个子节点,怎么获取父节点下面是标签的子节点?
var li = ul[0].childNodes;//申明一个无序列表变量
for(var eee in li){//遍历整个列表
if(li[eee].nodeType==1){//如果节点属性为1,则为标签
alert(li[eee].nodeName);//依次弹出标签名字
}
}
获取节点信息
节点.nodeName 节点的名称
节点.nodeType
节点的节点类型 1 element 2 attribute 3 text
节点.nodeValue 节点的文本内容
获取兄弟标签
节点名.nextSibling.innerText 获取下一个兄弟标签 innerText为节点内容
节点名.previousSibling 获取上一个兄弟标签
节点值得获取
innerText 起始和结束标签内的文本(火狐不管用 火狐为textContent)
innerHTMl 起始和结束标签内的HTML(IE)()
outerHTML 起始和结束标签内的HTML(包含标签本身 全部兼容)
节点值得赋值
节点.innerHTMl = "内容"; //直接赋值
节点值获取的兼容性设置
利用只有IE可辨别的document.all
if(document.all){
alert(节点.innerText);//IE
}else{
alert(节点.textContent)//火狐辨识和谷歌都可以辨识
}
设置属性节点
elementNode.setAttribute(attributeName,attributeValue)
举例 设置一个a节点的class值
a.setAttribute('class','lianjie');
attributeName 属性的名字 如href name value class
attributeValue 属性的值用冒号括起来
elementNode.getAttribute(arributeName) 获取节点属性
举例 弹出一个a标签的href
alert(a.getAttribute("href"));
删除一个属性
a.removeAttribute("值得名称");
删除节点
节点.removeNode(true); 括号内加true 为全部删除,不加只删除标签,不删除内容(IE适用)
w3c标准删除
节点.parentNode.removeChild(节点);
表单操作
insertRow(0) 插入一行 tr table.insertRow(0).innerText="这是添加一行列表,这里是添加的文本内容"
insertCell(0) 插入一列 td 必须在tr中加 tr.insertCell(0).innerText="这是添加的第一个td,第二个括号内写1"
rows[0] 获取在表格第几行 括号内写第几行
cells[0] 获取表格中第几行的 第几列的节点
deleteRow(0) 删除一行 括号里写删除第几个
deleteCell(0) 删除一列
createCaption 创建表格标题
获取高度宽度
节点.clientHeight padding+content 的高度
节点.clientWidth padding+content 的宽度
两个都不包括边框和超出部分
offsetHeight offsetWidth padding+content+border 的高度和宽度
offsetTop offsetLeft 节点border距离定位的父元素的距离
clientTop clientLeft 节点的content距离定位的父元素的距离
scrollWidth/scrollHeight
可以返回整个网页或某个元素的可视内容的宽度或者高度以后,加上滚动条可以滚动的内容距离值,也就是超出可视区域后额外的那些距离的高宽度;即使是空白的内容也会有效,就是 它们会返回的正确的值,注意该属性不包括边框和垂直滚动条的高宽度值
scrollLeft属性与scrollTop属性的作用相同,获取滚动条被拉动 移动的距离数值;
JavaScript实现
JavaScript的核心ECMAscript描述了该语言的语法和基本对象。
DOM描述了处理网页内容的方法和接口。
BOM描述了与浏览器进行交互的方法和接口。
一个完整的javascript实现是由 ECMAScript DOM BOM 3个不同部分组成的
JavaScript重要的学习五点
1、基础语法 ECMAScript
2、数组,函数,对象
3、DOM 动态的改变文本流
4、BOM
5、AJAX
javascript构成简说
ecmascript描述了以下内容:语法,类型,语句,关键字,保留字,运算符,对象
DOM描述以下内容:对文档的操作
DOM 视图-描述跟踪文档的各种视图(即css样式化之前和css样式化之后的文档)
DOM 事件-描述事件的接口
DOM 样式-描述处理基于CSS样式的接口
DOM 遍历和范围-描述遍历和操作文档树的接口
BOM大概描述一下内容: 对浏览器的操作
BOM主要处理浏览器窗口和框架,不过通常浏览器特定的javascript扩展都被看做BOM的一部分。这些扩展包括:
弹出新的浏览器窗口
移动、关闭浏览器窗口以及调整窗口大小
提供web浏览器详细信息的定位对象
提供用户屏幕分辨率详细信息的屏幕对象
对cookie的支持
ie扩展了BOM,加入了ActiveXObject类,可以通过javascript实例化ActiveX对象
javascript特性
脚本编写 基于对象 简单 安全 动态 跨平台
javascript优缺点
1、javascript可以方便地操纵各种浏览器的对象,可以使用
2、javascript来
javascript注释方法//单行注释 /**/中间为多行注释
javascript代码 嵌入式 链接式 导入式 document.wirte()
嵌入式
<html>
<head>
<script language="javascript" type="text/javascript">
alert('HELLO')
</script>
</head>
<body>
</body>
</html>
链接式
<script type="text/javascript" src="js/1.js"></script> js支持改名的,只要把type写上,写成1.ttt都没问题
javascript常见提示框
1警告框
alert(内容)
2、确认框
confirm(内容)有确定 取消两个按键
3、会话框
prompt(内,容)内对应的是标题,容对应的框里面的默认值
javascript常用的转移字符
符号 代表意
\' '
\" "
\n 换行
\\ \
javascript变量申明
区别大小写,var 申明时赋值 定义 才可以弹出内容
1、在变量申明的时候无需指定类型
2、在申明变量的时候通过var 关键字
3、变量名字区分大小写
4、经常使用注释
var 变量名 = 变量值;
javascript变量命名规范
1、必须以字母、下划线和$开头
2、变量名命名要有意义,一般采用驼峰发
3、余下的字符可以是下划线、美元符号或任何的字母、数字
4、最长为255个字符
5、不能有空格,大小写敏感
6、不能使用javascript中的关键字或保留字命名
javascript变量类型
undefined-未定义类型 未被赋值的变量,值为undefined
null-空类型 值为null,尚不存在的对象
string-字符串类型 值用引号括起来
Boolean-布尔类型 值为true/false
number-数字类型 任何数字(数字类型包含nan,int,float,且所有数字类型均用64位浮点数格式表示,数组索引采用32位整数)
可以使用 typeof(object)来获取object的类型
javascript变量显式转换
类型转换
javascript是弱类型语言,变量的类型对应于其值得类型,可以对不同类型的变量执行运算,解释器强制转换数据类型,然后进行处理如:
运算 结果
数值与字符串相加 将数值强制转换为字符串
布尔值与字符串相加 将布尔值强制转换为字符串 (true或者false转成字符串)
数值与布尔值相加 将布尔值强制转换为数值 (布尔值当中的true转成1,false转成0)
NaN,null,undefined,‘’,0,‘false’在判定时自动转成false 上面6个值,null=undefined,NaN永远不和任何值相等,在数字或者字符串前面加上2个!!可转换成布尔值
强制转换方式 强转数字Number() 强转字符串String() 强转Boolean()转不对会显示NaN
javascript自定义函数
js函数介绍
(1)函数也是一段js代码,它自定义一次,单可能不执行或者调用任意次;
(2)函数可以有0个或者多个参数(形参和实参),同时支持一个返回值;
(3)函数即对象
(4)可以将函数赋值给变量,或者作为参数传递给其他函数,可以设置它们的属性,可以调用它们的方法;
函数定义
(1)使用单独定义
function 函数名(arg1,arg2,arg3......){
code
}
(2) 使用变量赋值
var fun=function(arg1,arg2,arg3......){
code
}
(3) 使用构造函数
var fun=New Function(arg1,arg2,arg3.....,code....)
同一种方式申明的函数如果重名后面会覆盖函数;
如果不同方式申明函数同名,则变量定义的方式优先;
javascript函数嵌套
function textFun(a,b){
function 函数名(a){return a*a;};
return 函数名(a)+函数名(b);
}
1,调用函数只需要使用 变量名();或者函数名();即可
2,使用函数嵌套必须要注意,在函数体内的函数(也就是嵌套函数),只能在父级函数内调用,不能在全局调用和其他函数中调用;
ruturn语句在同方法当中后面的语句都不会执行;把值当作当前方法的结果
document.write(“文本内容”)
javascript函数递归
function fact(num){
if(num<=1){
return 1;
} else{
return num*fact(num-1)
}
}
(fact(5)意思为5*4*3*2*1)
javascript全局变量和局部变量
1、全局变量,在函数体外申明就是全局变量,在函数内部可以使用
2、局部变量,在函数内部用var申明的变量就叫做局部变量;
var i=‘全局变量’
function test(){
var i=‘局部变量’;
alert(i);//输出局部变量
}
alert(i);输出全局变量
arguments 对象
arguments对象主要用于获取函数形参相关的信息,比如可以直接或许形参的值,获取形参的长度。获取当前函数
主要特性:
arguments[]
数组只在函数体内定义。在函数体内,arguments引用该函数的arguments对象。该对象有带编号的属性,并作为一个存放传递给函数的所有参数的数组。标识符arguments本质上是一个局部变量,在每个函数中都会被自动申明并初始化。它值在函数体重才能引用arguments对象,在全局代码中没有定义。
arguments.callee 单签正在运行的函数 调自己整个的
arguments.callee.length;函数自身参数个数(形参)
arguments.length 传递给函数的参数的个数(实参)外面的运行函数参数下午 2:27
javascript数组介绍
(1)数组(array)是数据的结合,在js中,数组是一种基本的数据类型,该数据类型是复合型,一个数组可以包含多个元素,且每个元素都可以是任何数据类型
(2)在js中数据并不支持多维数组,以及关联数组,但缺可以实现多维数组和关联数组的功能,这其实使用对象模拟来实现的;
delete 删除某一下标的值,键不会被删除
设置速度的长度,比如某个数据长度为两个值,设置length为1,则将第二个的值和键一起删除
删除 splice Array.splice(起始的下标,结束的下标) 删除下标为1的键和值(1,1,)返回数组
toString() 将数组转成字符串 返回字符串 对原数组无影响
join 自定义转字符串 可以修改分隔符 Array.join("-") 通过-分割 对原数组无影响
返回值不会分割二维的数组
数组链接 concat Array.concat(多个数组逗号隔开) 对原数组无影响,返回值为新组合数组
Array.pop()删除数组最后一个元素,并返回删除后的值
Array.shift() 删除数组的第一个元素,并返回删除后的值
Array.unshift()在数据的最前头添加一个值,并影响数值,返回修改后的值得个数
Array.push()和 unshift 一样,在最后增加值
Array.reverse()颠倒顺序 返回颠倒的数组,并对原数组影响
Array.sort() 排序 默认顺序:数字 》 字母 》汉字》undefined
Array.slice(开始,结束) 提取数组里面的值 包含起始位置的值,但不包括结束位置的值
Array.splice(起始的位置,结束的位置,替换的值)
运算符语句
+ 运算符 同类型直接运算, 不同则是链接符的作用
- * / %(取模) 强行将字符串转换成数字类型,进行运算,无法运算结果显示NaN
++
++i var a=i+1;
i++ var a=i; a+1;
例子 var a=10; a = i++ + i--; a的值为21;因为++ -- 的优先级比+ - 高
+= -= *= /= i+=1;意思为 i=i+1;
== 比较符 两边的值是否相等 返回布尔型
=== 比的是类型 再加上值;
>= <= >或者= <或者=
字符串比较 是比较的长度 字符串和数字比较 字符串转换成数字比较 无法相比较返回false
|| or 或 && and 并
var yy = 123;
var xx = 'xxx';
var ss = yy || xx;
如果第一个值转换为boolean 为true 则ss = yy;反之 则ss = xx;如果都是false;那应该就没值了吧
三维运算 Boolean ?运算一:运算二;如果Boolean为true 执行运算一,反之执行运算二
对比if if(boolean){运算一}else{运算二}
循环语句 for(var i=0;i<9;i++){运算语句}
while(boolean){运算语句}循环 如果Boolean成立 一直循环
do{运算语句}while(Boolean);按顺序,至少会执行一次运算语句,如果Boolean成立继续执行
switch(变量名){
case 1;
运算语句
break;
case 2;
运算语句
break;
case 2;
运算语句
continue;
default:
运算语句;
}
变量名为1时,执行第一条语句,continue为只是跳出本次循环,以后的还会循环;break为跳出循环,不写会继续往下循环,没有匹配到,则执行default;
for(var 变量 in Array){
运算语句
}
遍历,将数组的循环赋值给变量,直到循环到数组的最后一个值
delete 对象 删除成功返回 true;通过var 申明的对象无法删除
in 检查数组或者对象的下标或键是否存在
1 in Array 意为 Array中是否含有下标为1 的值;存在返回true;左边的操作数必须为一个可以成功转成字符串类型的值,右边必须为数组或者对象
javascript 对象
对象的概念
1、对象是一种复合型数据类型,可以讲很多数据集中在一个单元中,对象通过属性来获取数据集中的数据,也可以通过方法来实现数据的某些功能;
2、对象通常会使用很多变量来描述一些实物的属性,例如一个名为COLOR的变量,该变量有可能会用来描述一个东西的颜色,比如说笔的颜色,水桶的颜色等,如果一个程序里有多个实物,那么久有可能要用多个变量来描述这些实物的颜色;那么对象就是把这些看上去杂乱无序的变量按逻辑进行分类;
3、对象的值可以是任何类型;
4、对象是可以被继承;
创建对象
var obj = new Object();创建一个对象
var obj = {};json方式创建一个空对象
var obj = new Object('类型') 创建一个基于类型的对象
var arr = new Array();穿件一个数组对象
var str = new String();创建一个字符串对象
var bol = new boolean();创建一个布尔类型对象
var obj = {name:"muzhi",age:18,arr:[1,2,3],fun:function(){alert("xxx")}};
var obj = new test();//构造函数 申明时会自动触发
对象的废除和属性删除
删除对象属性 delete obj.name
清空整个对象 obj = null;
对象中的this的用法
this 谁调用谁this就是谁
call(对象,a,b,c)第一个必须是对象,而且是调用
常用对象
字符串常用对象
搜索字符串当中指定的字符串出现的位置
str.indexOf() 里面填写字符串,返回值为字符串所在的上一个位置,不存在返回-1
str.lastIndexOf() 是找到最后一个能和字符串里面的匹配的字符串的位置
str.search() 搜索 但是可以使用正则
str.replace() 第一个填写需要替换的内容,第二个填写换成的内容,返回替换后的字符串,如果不存在返回原字符串
str.match() 搜索到返回搜索的结果,搜索不到返回null 原字符串不变,前面的都不变
str.slice(3,4) 截取 第一个写开始但截取不包括的位置,第二个写结束位置,返回截取字符串,结束的位置字符串没这么长,截取到最后对原字符串无影响
str.substr() 截取 第一个写开始的但不包括位置, 第二个写截取的长度
str.substring()于slice相同
str.toString() 转换成字符串
str.contact() 字符串链接,括号内写链接的字符串,返回链接后的字符串,对原字符串无影响
str.length 返回字符串的长度
str.charAt() 括号内写一个数字 返回这个数字位置的字符
str.charCodeAt() 返回这个数字的编码
str.toLowerCase() 将字符串转换成小写
str.toUpperCase() 将字符串转化成大写
str..split("") 分割方法 按括号内的符号,将字符串分割成数组
判断a是否是数组 a instanceof Array 如果是 返回true
match 对象常用方法
Math.ceil(num) 有小数点 取整时 个位数加一位
math.floor(num) 取整 直接把小数点以后去除
如果是负数,它两个相反
Math.min(1,2,3) 取里面最小的数
Math.max(1,2,3) 取里面最大的数
Math.round(num) 四舍五入
Math.abs(num) 返回相反数
Number.MAX_VALUE 最大数值
Number.MIN_VALUE最小数值
Number.POSITIVE_INFINITY 正无穷大
Number.NEGATIVE_INFINITY 负无穷大
Number.toString() 将数字转换成字符串
时间
Js获取当前日期时间及其它操作
var myDate = new Date();
myDate.getYear(); //获取当前年份(2位)
myDate.getFullYear(); //获取完整的年份(4位,1970-????)
myDate.getMonth(); //获取当前月份(0-11,0代表1月)
myDate.getDate(); //获取当前日(1-31)
myDate.getDay(); //获取当前星期X(0-6,0代表星期天)
myDate.getTime(); //获取当前时间(从1970.1.1开始的毫秒数)
myDate.getHours(); //获取当前小时数(0-23)
myDate.getMinutes(); //获取当前分钟数(0-59)
myDate.getSeconds(); //获取当前秒数(0-59)
myDate.getMilliseconds(); //获取当前毫秒数(0-999)
myDate.toLocaleDateString(); //获取当前日期
var mytime=myDate.toLocaleTimeString(); //获取当前时间
myDate.toLocaleString( ); //获取日期与时间
js DOM 操作
一个对象 4种获取 7种关系
1、对元素的添删改查(标签)
2、对元素的属性的添删改查(html属性,css属性)
3、对元素所包含的内容的添删改查
节点
根据DOM,HTML文档中的每个成分都是一个节点
DOM是这样规定的:
整个文档是一个文档节点
每个HTML标签是一个元素节点
包含在HTML元素中的文本是文本节点
每一个HTML属性是一个属性节点
注释属于注释节点
节点信息分类
每个节点都拥有包含着关于节点某些信息的属性。这些属性是:
nodeName(节点名称)
nodeValue(节点值)
nodeType(节点类型)
元素节点的nodeName 是标签名称
属性节点的nodeName 是属性名称
文本节点的nodeName 永远是#text
文档节点的nodeName 永远是#document
注释:nodeName 所包含的xml 元素的标签名称永远是大写的
节点标示符
nodeValue
对于文本节点,nodeValue属性包含文本。
对于属性节点,nodeValue属性包含属性值。
nodeValue属性对于文档节点和元素节点是不可用的。
nodeType
nodeType属性可返回节点的类型
最重要的节点类型是:
元素类型 节点类型
标签 1
属性 2
文本 3
注释 8
文档 9
空格 换行 也算一个节点
四项获取
1、getElementById();
获取Id为什么的节点;(Id 中的一种选择器,有且为一)获取一个对象
document.getElementById("id名");
在script标签中加入defer=“defer” 等同于把标签放在了html底部
在火狐谷歌里面用obj.textContent来获取元素节点的内容
2、document.getElementsByTagName("");
通过标签名字来获取,注意是个复数。访问哪一个需要按数组的形式访问,即使只有一个,也要用复数形式
如:document.getElementsByTagName("p")[0];或者赋值变量 obj[0]
3、document.getElementsByName();
用法同第二个,但是这个是获取含有name的元素节点
3、document.getElementsByClassName();
也是复数,用法同第二个,通过class获取,ie的9以上支持
创建节点
1、第一种方法,先把节点放到内存,然后通过变量使用
var 变量名 = document.createElement("div");//创建标签 内容为<div></div>
var 变量名 = document.createTextNode("创建文本节点,这里写文本内容");
2、添加节点
父节点.appendChild(变量名);在某个节点中添加一个节点,返回新节点引用
父节点.insertBefore(变量名,位置);默认最后面添加 比append多了一个功能,选择位置,节点名.firstChild 是第一个子元素前面,返回新节点引用
克隆 var 变量名 = 节点名.cloneNode(); 括号里面加true 为复制标签内所有内容全部复制 不加只复制标签
光克隆没有意义,只是放到内存里面,然后还需要把变量添加到某个地方
节点获取
引用子节点 elementName(节点名)
elementName.childNodes
elementName 节点下所有子节点数组
elementName.firstChild
elementName下的第一个节点
elementName.lastChild
elementName下的最后一个子节点
引用父节点
elementName.parentNode elementName节点的父节点
elementName.parentElement elementName节点的父元素(IE)
因为 空格 换行 也算一个子节点,怎么获取父节点下面是标签的子节点?
var li = ul[0].childNodes;//申明一个无序列表变量
for(var eee in li){//遍历整个列表
if(li[eee].nodeType==1){//如果节点属性为1,则为标签
alert(li[eee].nodeName);//依次弹出标签名字
}
}
获取节点信息
节点.nodeName 节点的名称
节点.nodeType
节点的节点类型 1 element 2 attribute 3 text
节点.nodeValue 节点的文本内容
获取兄弟标签
节点名.nextSibling.innerText 获取下一个兄弟标签 innerText为节点内容
节点名.previousSibling 获取上一个兄弟标签
节点值得获取
innerText 起始和结束标签内的文本(火狐不管用 火狐为textContent)
innerHTMl 起始和结束标签内的HTML(IE)()
outerHTML 起始和结束标签内的HTML(包含标签本身 全部兼容)
节点值得赋值
节点.innerHTMl = "内容"; //直接赋值
节点值获取的兼容性设置
利用只有IE可辨别的document.all
if(document.all){
alert(节点.innerText);//IE
}else{
alert(节点.textContent)//火狐辨识和谷歌都可以辨识
}
设置属性节点
elementNode.setAttribute(attributeName,attributeValue)
举例 设置一个a节点的class值
a.setAttribute('class','lianjie');
attributeName 属性的名字 如href name value class
attributeValue 属性的值用冒号括起来
elementNode.getAttribute(arributeName) 获取节点属性
举例 弹出一个a标签的href
alert(a.getAttribute("href"));
删除一个属性
a.removeAttribute("值得名称");
删除节点
节点.removeNode(true); 括号内加true 为全部删除,不加只删除标签,不删除内容(IE适用)
w3c标准删除
节点.parentNode.removeChild(节点);
表单操作
insertRow(0) 插入一行 tr table.insertRow(0).innerText="这是添加一行列表,这里是添加的文本内容"
insertCell(0) 插入一列 td 必须在tr中加 tr.insertCell(0).innerText="这是添加的第一个td,第二个括号内写1"
rows[0] 获取在表格第几行 括号内写第几行
cells[0] 获取表格中第几行的 第几列的节点
deleteRow(0) 删除一行 括号里写删除第几个
deleteCell(0) 删除一列
createCaption 创建表格标题
获取高度宽度
节点.clientHeight padding+content 的高度
节点.clientWidth padding+content 的宽度
两个都不包括边框和超出部分
offsetHeight offsetWidth padding+content+border 的高度和宽度
offsetTop offsetLeft 节点border距离定位的父元素的距离
clientTop clientLeft 节点的content距离定位的父元素的距离
scrollWidth/scrollHeight
可以返回整个网页或某个元素的可视内容的宽度或者高度以后,加上滚动条可以滚动的内容距离值,也就是超出可视区域后额外的那些距离的高宽度;即使是空白的内容也会有效,就是 它们会返回的正确的值,注意该属性不包括边框和垂直滚动条的高宽度值
scrollLeft属性与scrollTop属性的作用相同,获取滚动条被拉动 移动的距离数值;
相关文章推荐
- 初学JavaScript笔记,JavaScript对象
- JS初学笔记之一:JavaScript中 || 返回什么?
- 某人初学javascript的时候写的学习笔记
- JavaScript初学笔记之<执行环境及作用域>
- 2017.07.27am-初学Javascript的小笔记
- JavaScript初学笔记(1)
- JavaScript初学笔记
- 初学Javascript笔记
- javascript初学笔记——好玩的类库。
- 某人初学javascript的时候写的学习笔记
- 初学javascript笔记
- 初学JavaScript的笔记
- JavaScript初学笔记
- 初学 JavaScript–基础知识笔记(一)
- 初学Python笔记(一)
- JavaScript 学习笔记(一)
- 初学笔记B:TOMCAT下目录WEBAPPS的初识,和加载SERVLET和JSP的方法
- prototype.js-JavaScript包开发笔记
- JavaScript学习笔记3
- 两年前初学.NET时写的关于DataGrid的笔记