前端学习笔记-JavaScript
js引入方式:
1、嵌入js的方式:直接在页内的script标签内书写js功能代码。
<script type="text/javascript">alert('hello')</script>
2、外联式引入js:以相对路径的方式引入本地js文件,实现H5、CSS、JS分离。
<script type="text/javascript" src="hello.js"></script>
js变量和数据类型:
五种基本数据类型:number 、string 、boolean 、undefined 、null
一种符合类型:object对象
定义变量:使用var关键字,区分大小写。
变量定义规范:首字符为字母、下划线、美元符号,其他字符可为这些和数字。
var a = 123;
使用js操作属性:
<script type="text/javascript">
window.onload = function(){
//通过获取一个标签的id来联系标签
var oDiv = document.getElementById('div1');
var oInput01 = document.getElementById('input01');
var aLi = documentsgetElementsByTagName('li');//获取一组标签,使用时可通过下标确定具体使用哪一个
//对目标标签进行style属性重写
oDiv.style.color = 'red';
aLi[2].style.backgroundColor = 'blue';
var val01 = oInput01.value; //获取输入框内的值
9 oDiv.className = 'box02'; //操作类属性,注意class写法要写成className
10 oDiv.href = '1.css'; //为其引入新的样式文件
11 }
12</script>
js操作属性时的属性写法和H5里的写法基本一样,“class”的属性写成"className",style里边的属性有横杠的font-size写成style.fontSize。
还可以使用方括号来操作属性:oDiv.style[attr] = 'red';
以上function(){ } 就是js的函数书写形式。
自定义函数时写为:function change02(){ oDiv.className = 'sty02'; }
函数中可以使用return返回函数结果,也可以只使用一个单纯的return结束函数运行。
window.onload会使页面加载完后再加载其中的内容,注意写代码时的顺序。
匿名函数:
oDiv.onclick = myalert;
function myalert(){
alert('hello!');
} /*匿名函数简化代码,优化步骤
将上述代码改写成匿名函数的形式。*/ oDiv.onclick = function (){
alert('hello!');
}
函数传参:
changestyle('fontSize','50px'); function changestyle(styl,val){//会被预解析哦
oDiv.style[styl] = val;
}
这样会将函数中的fontsize传给styl,将50px传给val。
JS中的函数预解析:
alert(a); //不会报错但是会弹出undefined,相当于已声明未赋值。
//alert(c);开发工具里会报错(c没有声明)
var a = 123; myalert();//在定义函数前使用函数不会弹出undefine,因为js会将函数预解析。 function myalert(){
alert('hello!');
}
js加载时遇到函数,会将函数的声明和定义全部提前,因此可以在函数定义的前面调用函数。
函数中的条件语句格式:if{ },多重条件语句:if{ } else if { }或switch(true){ case:true:*****;break;default:****;}
函数中的for循环语句:for(初始值;条件;变化值){ *** };
var aRr = [1,2,3,4,3,4,5,7,4,5,7,3,9,5,6];
var aRr2 = [];
for (var i=0;i<aRr.length;i++) //以整个数组为范围进行循环,实现利用循环达到去重效果
{
if (aRr.indexOf(aRr[i])==i) //通过indexOf返回元素第一次出现的位置来去重
{
aRr2.push(aRr[i]);//将不重复元素放到新的空数组
}
}
函数中变量的作用域:
函数外部定义的变量是全局变量,函数内部定义的变量是局部变量。
全局变量即既可以被函数内部点调用,也可以被函数外部调用。
局部变量只可以被本函数内部调用,不可以被函数外部及其他函数调用。
全局变量一直放在内存里,不会被回收,只有本页面关闭或程序结束才会被回收。
函数内部在访问变量时,先从内部开始查找变量信息,如果有,使用内部变量,如果无,使用外部全局变量,外部再无,显示错误信息。
封闭函数:
(function(){
var str = '欢迎访问我的主页!';
alert(str);
})();//后边又加了括号,就是封闭函数自执行。
封闭函数定义:(function(){。。。})();
封闭函数的匿名函数减少了函数名避免了冲突的可能,且变量不会污染到全局。
函数闭包:
function aa(b){
var a = 12; function bb(){
alert(a);
alert(b);
}
return bb;
}
var cc = aa(24);//这个全部变量aa函数进行关联,导致aa函数包含的函数和变量都不会被回收
cc();
将24传给aa函数的形参b,闭包函数bb拿aa的形参b代入到自己的函数体的实参b。
闭包其实就是函数嵌套函数,可用来存储环索引值和私有变量计数器。
内部函数可以引用外部函数的参数和变量,参数和变量不会被垃圾回收机制回收。
因为让闭包和外部一个函数进行关联,把它赋值给一个外部变量,外部变量不会被回收,因此闭包的参数和变量也不会被回收。
模拟登录过程:
//1、存储跳转的源页面
var backurl = document.referrer;
//document.referrer是获取上一个跳转页面的地址(需要服务器环境) //2、处理中间的登录逻辑,如果成功 //3、跳转
window.location.href = backurl;
//window.location.href获取或重定url地址 <a href="http://www.baidu.com">百度</a>
JS中的数组操作:
创建数组:var aRr1 = new Array(1,2,3,'abc')或 var aRr2=[1,2,3,'abc']多维数组使用嵌套[ [数组1],[数组2],[数组3] ];
求数组长度:aRr.length
获取数组下标元素:aRr.[n] aRr1.[n][n]
拼接字符串:sTr = aRr.join("-") 使用-隔开元素,拼接结果为数组类型。
从末尾追加元素:aRr.push(val)
删除末尾元素:aRr.pop()
从头部插入元素:aRr.unshift(0)
删除头部元素:aRr.shift()
反转元素:aRr.reverse()
返回元素第一次出现的位置:aRr.indexOf(val)
从第n个元素开始删除m个元素,含n:aRr.splice(n,m)
删除完后从删除位置再补充进去几个元素:aRr.splice(n,m,'val1','val2',.........)
JS中的数值和字符串操作:
执行+运算时,若两个变量都为数值,按正常数学运算执行,若有一个变量的数字是字符串类型,运算时按拼接字符串运算执行。
数值运算可将字符型数字转换成数值行:parseInt(sTr) parseFloat(sTr),
数值运算中有个Math对象,使用Math.random()可获取随机数,math对象的更多用法查看文档。
字符串的第n个字符:sTr.charAt(0)
获取字符串中某个字符的下标位置:sTr.indexOf( 'str' ),没有时返回-1;
截取字符串中位置为n到m的元素:sTr.substring(n,m),前包后不包,后不写默认到尾;
转大写:sTr.toUpperCase();
转小写:sTr.toLowerCase();
数值运算返回的NaN:
NaN即Not a Number,
数字字符混合的情况下转换为数值时,开头就是字符的转换结果为NaN,开头是数字的只转换出数字部分,字符之后去除。
使用isNaN判断字符型数字时,返回false,不严谨。
简易计算器案例:
window.onload = function(){
var oInput01 = document.getElementById('input01');
var oInput02 = document.getElementById('input02');
var oBtn = document.getElementById('btn');
var oFuhao = document.getElementById('fuhao'); oBtn.onclick = function(){
var num01 = oInput01.value;
var num02 = oInput02.value;
var fuhao = oFuhao.value;
if (num01=="" || num02=="") {
alert('输入框不能为空1');
return;
} if (isNaN(num01) || isNaN(num02)) {
alert('请输入一个数字!');
return;
} switch(fuhao){
case 'add': //这里没有隐式转换,若有数字用‘数字’的字符串方式。
alert((parseFloat(num01)*100+parseFloat(num02)*100)/100);
break;
case 'subtract':
alert((parseFloat(num01)*100-parseFloat(num02)*100)/100);
break;
case 'multiply':
alert(((parseFloat(num01)*100)*(parseFloat(num02)*100))/10000);
break;
case 'divide':
alert(((parseFloat(num01)*100)/(parseFloat(num02)*100))/10000);
break;
}
}
}
<h1>计算器</h1>
<input type="text" name="" id="input01">
<select id="fuhao">
<option value="add">+</option>
<option value="subtract">-</option>
<option value="multiply">*</option>
<option value="divide">/</option>
</select>
<input type="text" name="" id="input02">
<input type="button" name="" value="点击计算" id="btn">
定时器及其基本使用:
定时器一般用来制作动画、异步操作、函数缓冲与节流。
var timer = setTimeout(function(){//3秒后弹出hello!,一次性定时器
alert('hello!');
},3000); clearTimeout(timer); //关掉一次性定时器 var timer2 = setInterval(function(){//反复执行定时器
alert('hi!');
},2000); clearInterval(timer2);//关闭反复执行的定时器
倒计时案例:
使用定时器做倒计时,实现前端自动下线倒计时。
window.onload = function(){
var oDiv = document.getElementById('div1'); //实际开发中,时间从服务器获取
function timeleft(){
var now = new Date();//获取时间戳
var future = new Date(2019,11,7,15,28,0);//创建一个日期
var lefts = parseInt((future-now)/1000);//做时差并换算成秒
var day = parseInt(lefts/86400);//将秒换算成天
var hour = parseInt((lefts%86400)/3600);//将秒换算成时
var minute = parseInt(((lefts%86400)%3600)/60);//将秒换算成分
var second = lefts%60; if (lefts<=0) {//(前端下线)倒计时结束后进入百度界面,且再访问不到原倒计时界面。
window.location.href ="http://www.baidu.com";
}
oDiv.innerHTML = '距离2019年11月20日晚24:00还有'+
day+'天'+hour+'时'+minute+'分'+second+'秒'; } timeleft();
setInterval(timeleft,1000); }
倒计时结束后本页面下线,之后再访问本页面显示的都是指定的百度页面。
前端学习笔记-JavaScript的更多相关文章
- 【前端】Web前端学习笔记【2】
[2016.02.22至今]的学习笔记. 相关博客: Web前端学习笔记[1] 1. this在 JavaScript 中主要有以下五种使用场景 在全局函数调用中,this 绑定全局对象,浏览器环境全 ...
- 【前端】Web前端学习笔记【1】
... [2015.12.02-2016.02.22]期间的学习笔记. 相关博客: Web前端学习笔记[2] 1. JS中的: (1)continue 语句 (带有或不带标签引用)只能用在循环中. ( ...
- Web前端学习笔记(001)
....编号 ........类别 ............条目 ................明细....................时间 一.Web前端学习笔记 ...
- web前端学习笔记
web前端学习笔记(CSS盒子的定位) 相对定位 使用相对定位的盒子的位置常以标准流的排版方式为基础,然后使盒子相对于它在原本的标准位置偏移指定的距离.相对定位的盒子仍在标准流中,它后面的盒子仍以标准 ...
- 学习笔记---Javascript事件Event、IE浏览器下的拖拽效果
学习笔记---Javascript事件Event.IE浏览器下的拖拽效果 1. 关于event常用属性有returnValue(是否允许事件处理继续进行, false为停止继续操作).srcE ...
- 前端学习笔记之JavaScript
JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中),后将其改名ScriptEase(客 ...
- 前端学习笔记汇总(之merge方法)
学习笔记 关于Jquery的merge方法 话不多说,先上图 使用jquery时,其智能提示如上,大概意思就是合并first和second两个数组,得到的结果是first+(second去重后的结果) ...
- [JS学习笔记]Javascript事件阶段:捕获、目标、冒泡
当你在浏览器上点击一个按钮时,点击的事件不仅仅发生在按钮上,同时点击的还有这个按钮的容器元素,甚至也点击了整个页面. 事件流 事件流描述了从页面接收事件的顺序,但在浏览器发展到第四代时,浏览器开发团队 ...
- HTML 学习笔记 JavaScript(面向对象)
现在让我们继续跟着大神的脚步前进 学习一下JavaScript中的面向对象的思想,其实作为一个iOS开发者,对面向对象还是比较熟悉的,但是昨晚看了一下Js中的面向对象,妈蛋 一脸萌比啊.还好有大神.让 ...
随机推荐
- Hive内外表的区分方法及内外部差异
Hive内外部区分方法 查看hive元数据:进入mysql中hive元数据库,查看TBLS表,查看对应的表名和表类型: 在hive-cli界面:desc extended tablename,查看Ta ...
- GB2312,GBK和UTF-8的区别
GBK GBK包含全部中文字符, GBK的文字编码是双字节来表示的,即不论中.英文字符均使用双字节来表示,只不过为区分中文,将其最高位都定成1.至于UTF-8编码则是用以解决国际上字符的一种多字节编码 ...
- 《利用Hyper-V搭建虚拟机》一篇管够,持续更新
开门见山:win10+Hyper-V+ContOS7.X 万物皆有目的:没钱买云服务器,但平时在家想持续学习,可以考虑在自己windows上搭建一台虚拟机,然后装上Linux,调试通网络进行开发. 涉 ...
- SVM多核学习方法简介
作者:Walker SVM是机器学习有监督学习的一种方法,常用于解决分类问题,其基本原理是:在特征空间里寻找一个超平面,以最小的错分率把正负样本分开.因为SVM既能达到工业界的要求,机器学习研究者又能 ...
- Activiti7流程定义
一.什么是流程定义 流程定义是线下bpmn2.0标椎去描述业务流程,通常使用activiti-explorer(web控制台)或 activiti-eclipse-designer 插件对业务流程进行 ...
- poj - 2096 概率dp (找bug)
题意:一个人一天只能找1个bug ,这个bug属于s个子系统中的某一个子系统,属于n种bug 中的某一种 ,求 这个人找出n种bug ,并且s个系统都bug的期望 (每个系统的一定可以找出bug) 一 ...
- LFU五种实现方式,从简单到复杂
前言 最近刷力扣题,对于我这种 0 基础来说,真的是脑壳疼啊.这个月我估计都是中等和困难题,没有简单题了. 幸好,力扣上有各种大牛给写题解.看着他们行云流水的代码,真的是羡慕不已.让我印象最深刻的就是 ...
- 实际开发中 dao、entity的代码怎样自动生成?一款工具送给你
01 关注"一猿小讲"朋友,都知道以往的文章一直倡导拒绝 CRUD,那到底什么是 CRUD?今天咱们就聊聊 Java 妹子小猿与数据库老头交互的事儿. 产品小汪铿锵有力的说:小猿同 ...
- 深入解读ES6系列(四)
来自老曾es6的前言: 哈喽小伙伴们,爱说'废'话的Z又回来了,欢迎来到Super IT曾的博客时间,上一节说了字符串,面向对象以及json的知识,这一节我们继续我们知识的海洋,一起奋斗不秃头!不足的 ...
- Navicat安装教程
Navicat安装教程 1.下载: 链接:https://pan.baidu.com/s/1uLlstPYrsjaNhZqVu9aFfQ 提取码:393r 2.下载完成之后如图所示: 首先安装第二个, ...