数据类型
检测数据类型 --- typeof 数据
数据类型:number(数字/NaN) 、 string(字符) 、 bollean(布尔) 、 object(对象 / null) 、 underfined(没定义) 、 function
数据类型分2大类:基本(不可分) -- number / string / boolean / underfined 、复合(可分) -- object / function
-------
类型转换
parseInt(数据) --> 整数
-转换失败 返回 NaN
-NaN的数据类型是number
NaN加上任何数都等于NaN
NaN不等于任何数,包括他自己
NaN == 非法数字
isNaN(数据) --> 判断数据是不是非法数字 返 true / false
a.显示转换
-parseInt
1.干掉小数,字符 --> 整数
2.从左到右找能转的转
3.忽略字符的前导0,后导0
4.做进制转换 --> 10
-parseFloat
1.转小数
2.同上
-Number
1.转数
2.严格型转换(先看一下有不能转的就返回NaN)
b.隐式转换(Number)
- * / ==
' ' + 数字 --> '110' 数字到字符
注意: === 不隐转
-------
取反 !数据(数字、字符、布尔) -- 把状态颠倒
-------
字符的方法
strObj.charAt(下标) 给:下标 返:字符/null
strObj.indexOf(字符) 给:字符 返:下标/-1(-->)
strObj.lastIndexOf(字符) 给:字符 返:下标/-1(<--)
strObj.substring(开始位置,结束位置) 不包含结束位置,只有开始位置就默认从开始位置-结尾
strObj.split(规则) 切割 给:规则 返:数组(找不到规则返回数组长度1就本身)
规则--在字符里找
strObj.toLowerCase() 小写
strObj.toUpperCase() 大写
*** 字符一旦创建无法修改,除非销毁
例子:判断浏览器、判断文件后缀
a.判断浏览器
Chrome(谷歌) / Firefox(火狐) / rv:11 or MSIE7-10(IE)
if(window.navigator.userAgent.indexOf('Chrome')!=-1){alert("谷歌")}
b.判断文件后缀名
var file = "xxx.png";
document.write(file.substring(file.lastIndexOf(".")+1,file.length));
-------
数组
var arr = [] / new Array()
arr.length=0; //清空数组 独有
数组内最好放相同数据
数组方法
修改原数组:arrObj.push(数据) 返回-数组长度
arrObj.pop() 返回-删除的数据/underfind
arrObj.unshift(数据) 返回-数组长度
arrObj.shift() 返回-删除的数据/underfind
arrObj.splice(其实位置,要删除的个数,要插入的元素)
arrObj.join(规则) --- 规则自个发明
arrObj.reverse() 反转数组
arrObj.sort(n1,n2){return n1-n2} 排序
不会修改原数组:arr1.concat(arr2) 连接数组 返回-新数组
-------
JSON
理解:给变量打了个包,属性和值配对儿,键值对儿
*** 属性都是字符
json没有length
循环json 用 for in(枚举)
数据解析 string: "{}" "[]"
a. substring --> split --> for in
b. eval("("+str+")")
c. JSON.parse(str) json-->string
d. JSON.stringify(json) string-->json
-------
Function
参数:个数 没有限制
参数和变量一样没有数据类型
函数定义在哪里不重要 重要的是在哪里执行!
***变量的值以调用为准
返回值:函数可以返回一个东西(没有类型)!
-function 函数名 (参数列表){return 值;}
-注意:函数没有执行一次都会复制一份!
-特性:a.返回值没有明确类型
b.return 后面的代码不执行
c.return; 返回一个underfined
d.没有return 默认会返回一个 underfined
e.只有函数才有返回值
封闭空间:闭包 自执行函数
-( function( index ){ js代码 } )( i );
-原理:函数每执行一次都会复制一份,包括里面参数!
-好处:省了一个函数名、防止重名、解决i的问题(事件里面的i 定时器的i)
-------
underfined:
1.定义了没有赋值 var a;
2.真的没有定义 typeof a;
3.访问一个不存在的属性 aBtn[i].index;
4.没有明确的返回值;
5.使用一个underfined;
-------
日期对象
var d = new Date(); 创建日期对象,取的是系统时间
d.getFullYear(); number 年
d.getMonth(); 月 月从0开始算
d.getMonth()+1; 为了显示正确
d.getDate(); 日
d.getHours(); 小时 24小时制
d.getMinutes(); 分钟
d.getSeconds(); 秒
d.getMilliseconds(); 毫秒
d.getDaty() 星期 星期天==0
d.setFullYear(年,月,日)
d.setHours(小时,分,秒,毫秒)
d.getTime() 返回 时间戳(number)
***设置日期是,时间会顺忒
获取本月有多少天:月+1,日设0,取日
d.setMonth(d.getMonth()+1)
d.setDate(0)
-------
定时器
setInterval(函数,多少时间走一次) -- 永远执行
setTimeout(函数,多少时间后执行) --只执行一次
开定时器 var timer = setInterval(fn,time) / var timer = setTimeout(fn,time)
关定时器 clearInterval(timer) / clearTimeout(timer)
***定时器在开之前,先关一下
-------
Math
Math.random() 0-1 包括0 但不包括1
Math.ceil(数据)向上,大,右
Math.floor(数据) 向下,小,左
Math.round(数据) 4小舍5大入
Math.abs(数据) 绝对值
Math.sqrt(数据) 开平方--负数不能开平方返NaN
Math.pow(基数,幂) 基数的幂次方
Math.max/min(数据) 最大、最小
-------
select
***option的value不可以省
oSel.value 返回的是选中的option的value值
oSel.selectedIndex 返回选中的option的索引
oSel.options[oSel.selectedIndex].text 返回是选中的option的内容
onchange事件 当选择发生改变--伴随获取、失去焦点
new Option(text,value) 创建option对象
oSel.options.add(oPt) options才有添加的方法
oSel.options.remove(索引) 删除