JS学习小结(上)
学而时习之,不亦说乎,开启JS学习新乐章~
JS是干啥的?网页特效,它主要是实现控制结构和样式,是一种行为,有多重要,不言而喻吧,页面炫酷的资本。
1. JS输出:
alert("hello World!") //第一种输出, alert 属于 window 对象,一般省略。
console.log()
console.warn()
console.error()//第二种输出,只在控制台输出,包含正常、警告、错误等信息,方便进行错误定位
document.write()//第三种输出,文档打印
2. 变量,就是一个容器 用来装东西的,变量具有不同的基本数据类型,变量有局部变量和全局变量之分,具体区别主要体现在作用域上,这里需要注意的是,写在函数体内部,但是没有var 声明的变量也是全局变量:
1 var //变量申明符
2 var carName = "hello"; //单双引是不分的哦,字符型,可通过“+”来连接,String()/.valueOf/.toString()来强制转换
3 var carNum = 12; //数值型,可通过Number()来转换,亦可通过内置函数parseInt()取整,parseFloat()取浮,isNaN()来判断是否为数值
4 var car = true; // boolean , 可通过Boolean()来转换
5 var a = new Object(); //引用型,Object包括:Int,Float,String,Function,Boolean,Array
6 var timer = null; // 空类型 null
7 var test; // 声明变量未给值 undefined,null == undefined(true)
3. JS书写位置
<a href=”javascript:void(0)”></a> //行内式
<script type=”text/javascript”>...事件代码...</script> //内嵌式
<script src="hello.js" type="text/javascript"></script> //外链式
4. 事件,前面说过JS是一种行为,行为就是事件, 事件三要素: 事件源,事件,事件处理程序三部分组成,通常以匿名的形式出现:
事件源.事件 = function() { 事件处理语句;} //匿名函数
<script>
// 获取元素
var one = document.getElementById("one"); // 获取第2个li
var two = document.getElementById("two"); // 获取第2个li
var pic = document.getElementById("pic"); // pic
// 操作元素
// 事件源.事件 = function() {}
two.onclick = function() {
pic.src = "images/02.jpg";
}
one.onclick = function() {
pic.src = "images/01.jpg";
}
</script>
/*
这里的时间不仅仅局限于noclick,也可以是ondblclick,onkeyup,onchange,onfocus,onblur ,onmouseover ,onmouseout ,onload,onunload等 */
5. 函数,函数是由事件驱动的或者当它被调用时执行的可重复使用的代码块。通常情况下,函数构建具有三种方式:
<script type="text/javascript">
// 尽量要求形参和实参相互匹配,静态方法
function fn(a,b) {
console.log(a+b);
return 3; // 终止程序执行,不会执行return 后面的语句
}
console.log(fn(1,2));// 调用函数,并且遵循先声明后调用的基本准则 // 动态匿名方法
var fun =new function('a','b','return a+b;');单双引号不分哦,不交叉使用即可 // 直接量方法
var fun = function(){
console.log(1);
}
进行new 操作实现函数构建,与普通方式构建函数差距很明显,new之后会将其看作是对象处理,必然会返回一个对象了,然后就可以更加灵活的使用构造方法以及我们熟悉好用的this。
1、函数预编译过程 this —> window
2、全局作用域里 this —> window
3、obj.func(); func()里面的this指向obj), 可以这样理解,谁调用func,则this就指向谁
4、call/apply 可以改变函数运行时this指向,
(1)、call用法:
func.call(要改变后的this, arg1, arg2, ... );
(2)、apply用法:
func.apply(要改变后的this, [arg1, arg2, arg2]);
(3)、apply和call共同点:都是改变this指向,apply和call不同点:传参形式不同,call是将参数一个个传进来,而apply是将所有参数存进一个数组中,然后将该数组传,如下demo:
function demo1() {
console.log(this);
}
// demo1() <==> this.demo1(); <==> window.demo1()
demo1(); // window
// demo2
var demo2 = {
retThis: function () {
console.log(this);
}
}
demo2.retThis(); // demo2 = {...}
// call / apply改变this
demo1.call(demo2); // demo2 = {}
demo2.retThis.call(window); // window
6. 流程,流程控制语句包括:循环,跳转,选择以及异常处理:
<html>
<body>
<script type="text/javascript"> //for循环
let array1 = ['a','b','c'];
for (let i = 0;i < array1.length;i++){
console.log(array1[i]); // a b c
} //while循环
var j= 1;
while(j>0){
console.log(j);
j--;
} //do while循环
do{
console.log(j);
j--;
}while(j>0); //for in循环
var array = [1,2,3,4];
for(let index in array) {
console.log(index,array[index]);
}; var A = {a:1,b:2,c:3,d:"hello world"};
for(let k in A) {
console.log(k,A[k]);
} //跳转包括:return; break; continue;
//选择包括if(判断语句){。。}else{}, if(判断语句){}else if(判断语句){}else{}
// 异常语句
try{
console.log(b); console.log("我不会输出的,不要找了")
}
catch(error){
console.log("发生错误了")
}
finally {
console.log("不管发生不发生错误,我都会执行")
}
console.log("我try catch后面的代码") //选择语句
var i = 4;
switch (i){ //i表示要判断的值
case 0:
document.write("星期天")
break;
case 1: //case里面都是所对应的值,每一个代码段后都要加上一个break让他跳出判断
document.write("星期一")
break
case 2:
document.write("星期二")
break
case 3:
document.write("星期三")
break;
case 4:
document.write("星期四")
break;
default: //default的意思是以上case里的值都不是的话,执行default语句里的代码段
document.write("什么都不是")
}
</script>
</body>
</html>
7. 数组,顾名思义,数据的集合,其构建及常见方法如下:
<script type="text/javascript"> //构建
var arr1 = new Array(); //创建一个空数组
var arr2 = new Array(20); // 创建一个包含20项的数组
var arr = new Array("lily","lucy","Tom"); // 创建一个包含3个字符串的数组
var arr4 = []; //创建一个空数组
var arr5 = [20]; // 创建一个包含1项的数组
var arr6 = ["lily","lucy","Tom"]; // 创建一个包含3个字符串的数组 //常规方法
//join(),将数组的元素组起一个字符串,以"-"为分隔符,可重复插入字符串
arr.join("-") //push(), 可以接收任意数量的参数,把它们逐个添加到数组末尾,并返回修改后数组的长度
var count = arr.push("Jack","Sean");
console.log(count); //
console.log(arr); // ["Lily", "lucy", "Tom", "Jack", "Sean"] //pop(), 数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项
var item = arr.pop();
console.log(item); // Sean
console.log(arr); // ["Lily", "lucy", "Tom", "Jack"] //shift(), 删除原数组第一项,并返回删除元素的值
var item = arr.shift();
console.log(item); // Jack
console.log(arr); // ["Sean", "Lily", "lucy", "Tom"] //unshift, 将参数添加到原数组开头,并返回数组的长度
var count = arr.unshift("Jack","Sean");
console.log(count); //
console.log(arr); //["Jack", "Sean", "Lily", "lucy", "Tom"] //sort(), 按升序排列数组项
var arr1 = ["a", "d", "c", "b"];
console.log(arr1.sort()); // ["a", "b", "c", "d"]
arr2 = [13, 24, 51, 3];
console.log(arr2.sort()); // [13, 24, 3, 51]
console.log(arr2); // [13, 24, 3, 51](原数组被改变,字符串比较原则) //reverse(), 反转数组项的顺序
var arr = [13, 24, 51, 3];
console.log(arr.reverse()); //[3, 51, 24, 13]
console.log(arr); //[3, 51, 24, 13](原数组改变) //concat(), 将参数添加到原数组中。
var arr = [1,3,5,7];
var arrCopy = arr.concat(9,[11,13]);
console.log(arrCopy); //[1, 3, 5, 7, 9, 11, 13]
console.log(arr); // [1, 3, 5, 7](原数组未被修改) //slice(), 返回从原数组中指定开始下标到结束下标之间的项组成的新数组(切片)
var arr = [1,3,5,7,9,11];
var arrCopy = arr.slice(1);
var arrCopy2 = arr.slice(1,4);
var arrCopy3 = arr.slice(1,-2);
var arrCopy4 = arr.slice(-4,-1);
console.log(arr); //[1, 3, 5, 7, 9, 11](原数组没变)
console.log(arrCopy); //[3, 5, 7, 9, 11]
console.log(arrCopy2); //[3, 5, 7]
console.log(arrCopy3); //[3, 5, 7]
console.log(arrCopy4); //[5, 7, 9] //splice(), 很强大的数组方法,它有很多种用法,可以实现删除、插入和替换
var arr = [1,3,5,7,9,11];
var arrRemoved = arr.splice(0,2);
console.log(arr); //[5, 7, 9, 11]
console.log(arrRemoved); //[1, 3]
var arrRemoved2 = arr.splice(2,0,4);
console.log(arr); // [5, 7, 4, 9, 11]
console.log(arrRemoved2); // []
var arrRemoved3 = arr.splice(1,1,2,4);
console.log(arr); // [5, 2, 4, 4, 9, 11]
console.log(arrRemoved3); //[7] // indexOf(), 接收两个参数:要查找的项和(可选的)表示查找起点位置的索引,lastIndexOf(),从数组的末尾开始向前查找
var arr = [1,3,5,7,7,5,3,1];
console.log(arr.indexOf(5)); //
console.log(arr.lastIndexOf(5)); // //forEach(), 对数组进行遍历循环,对数组中的每一项运行给定函数。这个方法没有返回值。参数都是function类型,默认有传参,参数分别为:遍历的数组内容;第对应的数组索引,数组本身。
var arr = [1, 2, 3, 4, 5];
arr.forEach(function(x, index, a){
console.log(x + '|' + index + '|' + (a === arr));
});
// 输出为:
// 1|0|true
// 2|1|true
// 3|2|true
// 4|3|true
// 5|4|true //map(), 指“映射”,对数组中的每一项运行给定函数,返回每次函数调用的结果组成的数组
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.map(function(item){
return item*item;
});
console.log(arr2); //[1, 4, 9, 16, 25] //filter(), “过滤”功能,数组中的每一项运行给定函数,返回满足过滤条件组成的数组
var arr = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
var arr2 = arr.filter(function(x, index) {
return index % 3 === 0 || x >= 8;
});
console.log(arr2); //[1, 4, 7, 8, 9, 10] //every(), 判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.every(function(x) {
return x < 10;
});
console.log(arr2); //true
var arr3 = arr.every(function(x) {
return x < 3;
});
console.log(arr3); // false //some(), 判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true
var arr = [1, 2, 3, 4, 5];
var arr2 = arr.some(function(x) {
return x < 3;
});
console.log(arr2); //true
var arr3 = arr.some(function(x) {
return x < 1;
});
console.log(arr3); // false //reduce()和 reduceRight(),这两个方法都会实现迭代数组的所有项,然后构建一个最终返回的值。reduce()方法从数组的第一项开始,逐个遍历到最后。而 reduceRight()则从数组的最后一项开始,向前遍历到第一项。
var values = [1,2,3,4,5];
var sum = values.reduceRight(function(prev, cur, index, array){
return prev + cur;
},10);
console.log(sum); //
<script>
JS学习小结(上)的更多相关文章
- 关于闭包的理解(JS学习小结)
前言: 啊啊啊,看书真的很痛苦啊,还是好想做项目写代码才有意思,不过我现在缺的确是将知识体系化,所以不论看书多么痛苦都一定要坚持坚持啊,这才是我现在最需要的进步的地方,加油! 因为现在期末啦,下周一也 ...
- JavaWeb基础—JS学习小结
JavaScript是一种运行在浏览器中的解释型的编程语言 推荐:菜鸟教程一.简介js:javascript是基于对象[哪些基本对象呢]和和事件驱动[哪些主要事件呢]的语言,应用在客户端(注意与面向对 ...
- React.js学习小结
最近一段时间都在学习React.js,感觉还不错,现在把自己的一些学习笔记记录一下,留着以后学习查看. 0.React全家桶(技术栈) 1.React主体 2.WebPack:grunt.gulp自动 ...
- Js学习文件上传
// 文件上传 jQuery(function() { var $ = jQuery, $list = $('#thelist'), $btn = $('#ctlBtn'), state = 'pen ...
- Egg.js学习与实战系列 · 文件上传配置
在使用Egg.js搭建文件上传服务时,遇到了几个一般新手都会遇到的坑. 经查阅官方文档,Egg框架中默认使用egg-multipart插件进行文件上传,所以上传文件前需要做相关的配置. 上传文件提示: ...
- ExtJs学习笔记之学习小结LoginDemo
ExtJs学习小结LoginDemo 1.示例:(登录界面) <!DOCTYPE html> <html> <head> <meta charset=&quo ...
- Js继承小结
Js继承小结 一直以来,对Js的继承有所认识,但是认识不全面,没什么深刻印象.于是,经常性的浪费很多时间重新看博文学习继承,今天工作不是特别忙,有幸看到了http://www.slideshare.n ...
- 【转载】Hyperledger学习小结
Hyperledger学习小结 自学Hyperledger Composer也有段时间了,是时候对所学的知识总结一下了.因为没有实际项目参与的话,差不多也就到此为止了.后续可能会去了解一下以太坊的技术 ...
- AJAX学习小结
12345678910 $.ajax({ "url":"", //访问路径 "data":"", // 需要传输的数据 ...
随机推荐
- nginx介绍 - 部署到linux中
前言: tomcat理论并发处理能力, 大概500左右吧, 即使通过一些优化, 能提升一点, 但是, 并不能达到质变, 最多涨几百. 对于非互联网项目, 确实够用了. 在企业中, 如果要达到500并发 ...
- Debug技巧
多线程调试 有些时候为了观察多个线程间变量的不同状态,以及锁的获取等,就会想到在代码里加个断点debug一下. 在IDE里断点停下来的时候,可以切换到另外的线程中,跑其他的代码,不会互相影响.这里是有 ...
- 120分钟React快速扫盲教程
在教程开端先说些题外话,我喜欢在学习一门新技术或读过一本书后,写一篇教程或总结,既能帮助消化,也能加深印象和发现自己未注意的细节,写的过程其实仍然是一个学习的过程.有个记录的话,在未来需要用到相关知识 ...
- 配置IIS的负载均衡
在大型Web应用系统中,由于请求的数据量过大以及并发的因素,导致Web系统会出现宕机的现象,解决这一类问题的方法我个人觉得主要在以下几个方面: 1.IIS 负载均衡. 2.数据库 负载均衡. 3.系统 ...
- FFmpeg封装格式处理3-复用例程
本文为作者原创,转载请注明出处:https://www.cnblogs.com/leisure_chn/p/10506653.html FFmpeg封装格式处理相关内容分为如下几篇文章: [1]. F ...
- 鸟哥的Linux私房菜:基础学习篇 —— 第五章笔记
1.Linux一般将文件可存取的身份分为三个类 别,分别是 owner/group/others,且三种身份各有 read/write/execute 等权限.其中 root 的权限最高. 2.在我们 ...
- Linux进程间通信(System V) --- 消息队列
消息队列 IPC 原理 消息队列是消息的链式队列,如下图为消息队列的模型.整个消息队列有两种类型的数据结构. 1.msqid_ds 消息队列数据结构:描述整个消息队列的属性,主要包括整个消息队列的权限 ...
- Python入门到精通学习书籍推荐!
1.Python基础教程(第2版 修订版)<Python基础教程(第2版修订版)>包括Python程序设计的方方面面,内容涉及的范围较广,既能为初学者夯实基础,又能帮助程序员提升技能,适合 ...
- 中国MOOC_面向对象程序设计——Java语言_第4章 继承与多态_第4周编程题_将MP3媒体类型存放进Database
本周我们介绍了以继承方式实现的媒体资料库,在课程代码实现的基础上,请实现一个表达MP3的媒体类型,能和CD.DVD一样存放进这个Database.请提交这个MP3类的代码.如果你认为为了能存放MP3, ...
- PyCharm 安装 pip
打开 File --> Settings --> Project Interpreter --> 点击右边 + 号 --> 搜索栏输入 pip --> 点击 Instal ...