js学习内容总结(1)

获取元素:
document.getElementById 通过id获取一个元素
obj.getElementsByTagName 通过标签名获取一组元素
obj.getElementsClassName 通过Class获取一组元素,不兼容低版本浏览器

操作属性:
. 只能操作已有的属性,更简单
[] 更灵活,点能做的,方括号都能做。方括号中放的是字符串,还能放变量

判断苹果手机和安卓手机:

<script>
window.onload = function () {
alert("1");
var u = navigator.userAgent;
if (u.indexOf('Android') > -1 || u.indexOf('Linux') > -1) {//安卓手机
alert("安卓手机");
// window.location.href = "mobile/index.html";
} else if (u.indexOf('iPhone') > -1) {//苹果手机
// window.location.href = "mobile/index.html";
alert("苹果手机");
} else if (u.indexOf('Windows Phone') > -1) {//winphone手机
alert("winphone手机");
// window.location.href = "mobile/index.html";
}
}

</script>
操作样式
.style 操作行间样式
.className 操作class


变量:

如果变量声明了,没有赋值,那么 undefined;

如果声明了变量,没有使用,那么报错 is not defined;


函数:
两个阶段:
定义 告诉浏览器有这个函数,但是不会真正执行。

调用 执行函数

如果只有定义,没有调用,那么什么也不会发生;

如果只有调用,没有定义,那么会报错;


事件 用户的操作
onclick 点击事件
onmouseover 鼠标移入
onmouseout 鼠标移出
onmousedown 鼠标按下
onmouseup 鼠标抬起
onchange 状态改变 select 99%加的都是onchange事件
onload 加载完成
onscroll 滚动条滚动事件
onresize 改变窗口大小事件
obj.onfocus 获取焦点事件 (焦点事件用于text\文本输入框被选中的时候)
obj.onblur 失去焦点事件
ondblclick 双击事件
onmousemove 鼠标移动事件
onpropertychange属性改变
oncontextmenu 右键菜单
onsubmit 提交表单
onmousewheel 鼠标滚轮事件
oninput 输入事件 兼容高版本浏览器
obj.onpropertychange 兼容IE的

这两个事件本身没有over和out的bug
onmouseenter 代替移入
onmouseleave 代替移出


解决onmouseover的bug
oDiv.onmouseover=function(ev){
var oEvent = ev||event;
var oFrom = oEvent.fromElement||oEvent.relatedTarget;
if(oDiv.contains(oFrom)){
return;
}
alert('移入le');
};


循环:
while 当次数不固定时使用while
for 当次数固定时使用for

请写出流程控制语句?
if判断 swith判断
.....


获取非行间样式
obj.currentStyle.样式名 ie系列
getComputedStyle(obj,false).样式名 高级浏览器


获取随机数
Math.random() 0-1的随机小数,但是不包括1

n-m
parseInt(n+Math.random()*(m-n));


返回值 是函数的一部分
特性:
1.阻断后面的程序执行
2.如果写return,但是没有值,会返回undefined
3.如果没写return,会返回undefined

return的作用:
封装函数
阻断程序


定时器:
setInterval(函数,ms); 每隔一段时间就执行一次,连续执行
clearInterval(timer); 关闭定时器
setTimeout(函数,ms); 过了一段时间就执行一次,只执行一次
clearTimeout(timer); 关闭定时器

****开定时器(一定要先清,后开)。

日期对象

new Date(); 值不会自己改变。什么时候new的,这个时间永远都是那个时候。

获取
odate.getFullYear() 获取年;
odate.getMonth() 获取月,比现实月小1 odate.getMonte+1;
odate.getDate() 获取天;
odate.getDay() 获取星期,星期日是0;

odate.getHours() 获取小时;
odate.getMinutes() 获取分钟;
odate.getSeconds() 获取秒;

注:大写代表 年月日,小写代表 时分秒

倒计时

得到目标时间

当前时间

时间差=目前时间-当前时间;

oDate.getTime(); 格林威治时间戳

格林威治时间:
1970.1.1 0点0分0秒0毫秒

如何得到目标时间的时间戳;
把时间调到目标时间;

设置
oDate.setFullYear(y,m,d); 设置年月日,设置日期的时候月份要减1;
oDate.setFullYear(y,m); 设置年月;
oDate.setFullYear(y); 设置年;

oDate.setHours(h,m,s,ms); 设置时分秒毫秒;
oDate.setHours(h,m,s); 设置时分秒;
oDate.setHours(h,m); 设置时分;
oDate.setHours(h); 设置时;

oDate.setMoth(m,d); 设置月日;
oDate.setMoth(m); 设置月;

oDate.setDate(d); 设置日;

oDate.setMinutes(m,s,ms); 设置分秒毫秒;
oDate.setMinutes(m,s); 设置分秒;
oDate.setMinutes(m); 设置分;

oDate.setSeconds(s,ms); 设置秒毫秒;
oDate.setSeconds(s); 设置秒;

星期不能设置;
日期对象在设置时,如果给比较变态的数字,自己会进位找。

获取目标时间戳;


短信发送倒计时

表单元素属性:

disabled 让元素失效;

redadonly 只读,不能操作在JS中;

事件名绝对禁止大写。

命名规范:
驼峰命名法:除第一个单词,剩下的都要首字母大写。

匈牙利命名法
开头有前缀,第二个单词开始首字母大写。

必须遵守的
o object 一个对象 obtn 一个按钮
a array 一组对象 abtn 一组按钮

可以遵守的
s string 一个字符串 sName 一个名字
i int 一个整字 iNum 一个整数
b boolean 一个布尔值 bOK 一个布尔值

不用管的
f float 一个小数 fPrice 一个价格
v 一个变体变量
re RegEXp 一个正则
fn function 一个函数 fnShow 一个函数


语言基础:

代码调试:

软调试:借助工具。
浏览器自带的:
chrome F12或者右键审查属性;
firefox F12 插件firebug
IE F12
点击-inter选项-高级-禁用脚本调试勾掉
IETester 安装插件

硬调试:
alret();
document.title 标题 数值变化的时候使用
document.body body
document.write() 写
console.log() 控制台日志


数据类型:
Number 数字
undefined 未定义
object 对象
String 字符串
boolean 布尔值
function 函数

undefined什么时候出现?
1.变量只声明,带没有赋值,就是undefined;
2.有参数,但是没有传值
3.访问一个,没有的属性


数据类型转换:
parseInt(); 转整数
parseFloat(); 转小数
Number(); 转数字,更严格

NaN not a number
是Number类型
NaN不等于任何东西,包括自己
检测NaN用:isNaN() 如果是NaN就是true,否则是false

eval 把字符串中的语句,解析成可执行的语句


作用域:
局部 只能在声明它的函数内使用
全局 哪都能用
闭包 子函数可以使用父函数的东西

i的问题:
1.循环中加事件,事件中使用i
自定义属性,封闭空间
2.循环中加定时器,定时器中使用i
封闭空间

封闭空间
(function(){

})();

(function(index){

})(i);

作用:
解决i的问题
解决变量名冲突的问题


必须要会的


*toDou *
*rnd *
*getStyle *
*setStyle *
*findInArr *
*sort *
*getByClass *
*json2url *
*url2json *


  • 前面加0
    function toDou(inum){
    return inum<10?'0'+inum:inum;
    }

随机数
function rnd(n,m){
return parseInt(n+Math.random()
(m-n));
}

*获取行间样式
function getStyle(obj,sName){
if(obj.currentStyle){
return obj.currentStyle[sName]
}else{
return getComputedStyle(obj,false)[sName]
}
}

*设置行间样式
function setStyle(){
if(arguments.length==2){
for(var name in arguments[1]){
arguments[0].style[name]=arguments[1][name]
}
}else{
arguments[0].style[arguments[1]]=arguments[2]
}
}

  • 从数组中查找是否用相同的
    function findInArr(arr,num){
    for(var i=0;i<arr.length;i++){
    if(arr[i]==num){
    return true;
    }
    }
    return false;
    }

*sort排序
arr.sort(function(n1,n2){
return n1-n2; 从小到大排序;
return n2-n1; 从大到小排序;
})

getByClass
function findInArr(arr,item){
for(var i=0;i<arr.length;i++){
if(arr[i]==item){
return true;
}
}
return false;
}
function getByClass(obj,sClass){
if(obj.getElementsByClassName){
return obj.getElementsByClassName(sClass);
}else{
var aResult = [];
var aEle = obj.getElementsByTagName('
');
for(var i=0;i<aEle.length;i++){
var aClass = aEle[i].className.split(' ');
if(findInArr(aClass,sClass)){
aResult.push(aEle[i]);
}
}
return aResult;
}
}

*josn2url
var json={'a':'1','b':'2','c':'3'}
var arr=[];
for (var i in json) {
arr.push(i+'='+json[i]);

}
document.write(arr.join('&'));

*url2josn
var url='a=1&b=2&c=3';
var arr=url.split('&');
var json={};
for (var i=0;i<arr.length;i++) {
var arr2=arr[i].split('=');
json[arr2[0]]=arr2[1];
}
console.log(json);


换肤
选项卡
双色球
倒计时
简易秒表
数字时钟
图片时钟
简易游戏
拍卖倒计时
按钮控制选项卡
自动播放选项卡
联动全选
延迟选项卡
无限下拉延迟版


arguments 实参参数的数组; 当参数的个数不固定时;

批量设置样式
obj.style.cssText
不是好东西,有瑕疵,有问题;
会覆盖行间样式
不用。


with(obj.style){
样式名=样式值;
}
不是好东西,因为会干扰作用域;
不用。


获取浏览器的详细信息:
window.navigator.userAgent

字符串常用方法:

str.charAt(); 在字符串中查找某一位置字符;
str.indexOf(); 从前往后找,查找在某一小字符串在大字符串中第一次出现的位置。如果找到了返回位置,否则返回-1;
str.lastIndexOf(); 从后往前找,查找在某一小字符串在大字符串中第一次出现的位置。如果找到了返回位置,否则返回-1;
str.substring(开始位置,结束位置); 截取字符串,从开始位置截取到结束位置,但不包括结束位置;
str.substring(开始位置); 截取 字符串,从开始位置截取到最后;
str.toLowerCase(); 把字符串变成小写;
str.toUpperCase(); 把字符串变成大写;
str.split(); 把一个字符串拆分成数组;

获取字符串编码:
str.charCodeAt(下标); 获取某一位置的编码

通过编码得到字符:
string.fromCharCode(编码)

关于字符串比较;
字母 按照字典序;
数字 按照字典序;
汉字 编码顺序,乱来。


数组常用的方法:

关于后面的操作:
arr.push(); 在数组的后面添加一个
arr.pop(); 在数组的后面删除一个,把删掉的东西返回。

关于前面的操作:
arr.unshift(); 在数组的前面添加一个
arr.shift(); 在数组的前面删除一个,把删掉的东西返回。

关于中间的操作:
arr.splice(); 删除、插入、替换
删除
arr.splice(开始位置,length);

插入
arr.splice(开始位置,0,插入的内容);

替换
arr.splice(开始位置,length,替换的内容);

arr.join(); 把数组变成字符串;

arr.reverse(); 数组翻转;

arr.concat(); 数组连接;

arr.sort(); 数组的排序;

sort排列数字

arr.sort(function(n1,n2){
if(n1>n2){
return 1; 正数
}sele if(n1<n2){
return -1; 负数
}sele {
return 0;
}
});

arr.sort(function(n1,n2){
return n1-n2; 从小到大排序;
return n2-n1; 从大到小排序;
});


Math常用方法:

Math.random(); 获取0-1的随机小数,不包括1;

取整:
Math.ceil(); 向上取整
Math.floor(); 向下取整
Math.round(); 四舍五入

其他:
Math.abs(); 取正数
Math.sqrt(); 开方
Math.pow(); 幂(n次方)
Math.max(); 求最大值
Math.min(); 求最小值


json 装东西的

格式: 像把一堆变量打了一个包
json={名字:值,名字:值,名字:值.....};
名字和值成对出现的。

console.log(); 从console.log查看json;

arr json

[1,2,3] [a:1,b:2,c:3]
有长度 没有长度
[下标] ['名字'](字符串) .名字
while/for for...in...

for...in循环:

for(var i in json){
//i代表的是 名字
//json[i] 值
}

不只json能用,数组也可以用;
数组不推荐使用for...in,for...in循环性能差;

例题:

var josn={name:小明,job:前端工程师,age:18岁,address:杭州,family:[
{name:小红,age:26岁,job:java工程师}
{name:小花,age:23岁,job:设计}

]}

标准写法:
var josn={'name':'小明','job':'前端工程师','age':'18岁','address':'杭州','family':[
{'name':'小红','ag'e:'26岁','job':'java工程师'}
{'name':'小花','age':'23岁','jo'b:'设计'}

]}


select 下拉框

select 99%加的都是onchange事件

如何完美的添加一个新的选项:
创建一个新的选项
new Option(文本,value);
插入
oS.add();

当前选中项的索引
oS.selectedIndex;

获取到select中所有的选项
oS.options
option有属性:
.value
.text 文本

删除一个选项
oS.remove();


数组

new Array

var arr=[1,2,3]
var arr=new Array(1,2,3)
区别:没有区别。

数组的length是可以修改的。

字符串的length不可以修改。

数组清空:
1.arr.length=0;
2.arr= [];
3.arr.splice(0,arr.length)
4.while
arr.pop||arr.shift


eval深入

eval 把字符串里面的语句,解析成可执行的语句
eval 解析json的时候,json两边要加括号
eval 解析函数的时候,函数两边要加括号


数组排序,怎么排的

自己写排序:
算法:解决问题的方法。
快排、冒泡、桶排、推排、二叉树。。。

var arr[12,5,3,100,8,23,9,21]

如何找最小,交换位置

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容