WEB基础:JavaScript
来源:互联网 发布:中国软件杯影响力 编辑:程序博客网 时间:2024/05/16 01:30
JS:JavaScript
- 特点
是一种网页编程技术,用来向HTML页面添加交互行为直接潜入HTML页面
由浏览器解释执行代码,逐行执行,不进行预编译 - 作用
客户的数据计算
客户端表单合法性验证
浏览器事件的触发
服务器的异步数据提交 - 操作对象
其操作的目标是HTML和CSS - 事件
事件就是触发调用JS的时机。如:单击(onclick),双击(ondblclick)
JS通常是通过事件触发的,因此需要先定义事件再写JS - js=ECMAScript+BOM+DOM.
js的使用方式
1.事件定义式:在元素上定义事件时直接写js
<input type="button" value="按钮1" onclick="alert('hi');">
2.嵌入式:在script标签里书写js.该标签可以写在head里,也可以写在body中任意位置.
<script> //js单行注释 /*js多行注释*/ //1)js的函数都是公有的 //2)js的函数有返回值,但不用声明其类型 function f2() { //js中单引号和双引号一样 alert("How are you?"); } </script>
注意:此处书写js有2种方式:
1) 将js代码封装到函数里,该函数在页面加载完, //用户点击按钮时被调用.
2) 直接在此处书写js,则这些代码在页面加载时 //立刻被浏览器调用,其调用时机甚至比body还早.
3.文件调用式:在独立的js文件内书写js.该标签不能既引入js又书写js.
<script src="my.js"></script>
js中:语法规范,标识符与变量,运算符,表达式和流程控制语句很多和java类似,但仍有很多值得注意的点。
概述
由于js是一门弱类型语言,所有变量都用var来定义
变量没有类型,但是变量所引用的数据有类型。这会带来一些不一样的特性。
js数据类型:
- javascript有6种数据类型,其中5种基本类型
- 原始类型/基本类型:简单的数据段
- 引用类型:可能由多个值构成的对象
注意:在很多语言中,字符串以对象的形式来表示,因此是引用的,但是ECMAScript放弃了这一传统。
数据类型隐式转换
字符串等级最高,任何类型和字符串相+都为字符串
boolean在+时会变为1/0
boolean在和字符串+时会变成true/false字符串
强制转换和函数
借助一些函数可以实现强转
console.log(parseInt("abc"));console.log(parseInt(""));//NaNconsole.log(typeof("11")); //typeof是操作符typeof null //Objectconsole.log(isNaN(""));//false
运算符
- ===是全等于,包括类型匹配
- NaN和任何都不相等
- 5/2=2.5;
- 0.1+0.2=0.300000000000000004; //浮点数的舍入误差
- 关于&& 和||的巧用:
- 2&&1=1
- 2||1&=2
条件表达式
js中可以用任意类型的数据做条件, 当用非布尔值做条件时,有如下原则:
所有的非空值都相当于true;
空值:undefined,NaN,0,null,””
该原则是为了简化条件表达式
var k = null; if(k) { console.log("ok"); }
js对象
js对象是js中非常重要的内容。
- 分类
- 内置对象:
- 外部对象
- window
- dom
- 自定义对象
内置对象
常用分类
- String
- Number
- Boolean
- Array
- Math
- Date
- RegExp
- Fuction
这里的String,Number,Boolean是基本包装类
由于一些对象的方法和java类似就不做介绍了,具体可以查看w3c手册。
String
js中字符串直接量用单引号和双引号都可以。
属性:length
x.charCodeAt(index):返回指定位置字符的unicode编码。
Number
toFixed(num):转换为字符串,四舍五入保留小数点后num位,不够用0补充。
Array
js中的数组都是Object数组
1)如何创建数组
//已知要存的数据 var a1 = ["zhangsan",25,false]; console.log(a1[0]); //不知要存的数据 var a2 = new Array(); a2.push("lisi"); a2.push(28); a2.push(true); console.log(a2[0]);
2)数组倒转
var arr = [5,12,8,1,6,4,2]; arr.reverse(); console.log(arr);
3)数组排序
arr.sort(); console.log(arr);//默认方式 arr.sort(function(a,b){ //自定义函数比较 return a-b; }); console.log(arr);
Date
1)创建Date
var d1 = new Date(); var d2 = new Date("2017/09/01 09:09:09"); console.log(d1); console.log(d2);
2)转换为本地格式的字符串
console.log(d1.toLocaleDateString());console.log(d1.toLocaleTimeString());
3)读取时间分量
var y = d1.getFullYear(); //月份从0开始 var m = d1.getMonth()+1; var d = d1.getDate(); var today = y + "年" + m + "月" + d + "日"; console.log(today);
RegExp
var str = "You can you up,no can no bb.";
1)如何创建正则对象
- 直接量语法
/pattern/attributes 属性:i:忽略大小写,g:全局匹配 - 创建 RegExp 对象的语法:
new RegExp(pattern, attributes);
var reg = /no/;
2)test():检测字符串中是否包含与正则匹配的子串
console.log(reg.test(str));
3)exec()
//普通模式下 //从字符串中检测出与正则匹配的第1个子串 console.log(reg.exec(str)); console.log(reg.exec(str)); //全局模式下 //第1次调用,则从字符串中检测出与正则匹配的第1个子串 //第n次调用,则从字符串中检测出与正则匹配的第n个子串 reg = /no/g; console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str)); console.log(reg.exec(str));
Function
- 函数是按值传递的
- 每个参数都会赋值给函数中的arguments数组
function sum() { var s = 0; if(arguments.length) { for(var i=0;i<arguments.length;i++) { s += arguments[i]; } } return s; } //页面加载时立刻调用函数 console.log(sum(1,2)); console.log(sum(3,4,5,6));
window对象
调用window对象的属性或方法,可以省略”window.”,因此有些全局函数
全局函数
- 弹出框的三种类型
function f1() { alert("你好"); } function f2() { var b = confirm("你吃了吗?"); console.log(b); } function f3() { var v = prompt("你吃的啥?"); console.log(v); }
- 周期性定时器
function f4() { //启动定时器,让浏览器每1000毫秒调用一次函数. //该方法返回定时器的ID,此ID用于停止此定时器. var n = 5; var id = setInterval(function(){ console.log(n--); if(n<0) { clearInterval(id); console.log("DUANG"); } },1000); //启动定时器就相当于启动了一个支线程, //而当前方法f4相当于主线程,2个线程是 //并发执行的,不互相等待.因此f4方法在 //启动了定时器后,立刻执行输出BOOM的代码, //而定时器却是在1000毫秒后才执行第一次. console.log("BOOM"); }
- 一次性定时器
var id; function f5() { //启动定时器,让浏览器在10000毫秒后调用该函数. //浏览器调用函数后,该定时器会自动停止. id = setTimeout(function(){ console.log("叮叮叮叮叮"); },10000); }
外部对象
BOM
浏览器对象模型
function f1() { var b = confirm("您确定要离开本页吗?"); if(b) { location.href = "http://www.tmooc.cn"; } } function f2() { location.reload(); } function f3() { history.forward(); } console.log(screen.width); console.log(screen.height); console.log(navigator.userAgent);
DOM
文档对象模型
读写节点
//onload是页面加载事件,在页面加载完成时, //由浏览器自动触发,触发时调用对应的函数. window.onload = function(){ //1.读取节点的名称和类型 var p1 = document.getElementById("p1"); console.log(p1.nodeName); console.log(p1.nodeType); //2.读写节点的内容 //内容:双标签中间的文本,如<a>内容</a> //innerHTML(包含标签) console.log(p1.innerHTML); p1.innerHTML = "1.DOM操作可以<u>读写</u>节点"; //innerText(不含标签) var p2 = document.getElementById("p2"); console.log(p2.innerText); p2.innerText = "2.DOM操作可以<u>查询</u>节点"; //3.读写节点的值 //值:表单控件中的数据(label除外) var b1 = document.getElementById("b1"); console.log(b1.value); b1.value = "BBB"; //4.读写节点的属性 //1)调用方法 var i1 = document.getElementById("i1"); console.log(i1.getAttribute("src")); i1.setAttribute("src","../images/02.jpg"); i1.removeAttribute("src"); //2)调用属性名 //id,style,className var a1 = document.getElementById("a1"); console.log(a1.style); console.log(a1.style.color); a1.style.color = "blue";
查询节点
window.onload = function(){ //1.根据id查询节点 //2.根据标签名查询节点 //3.根据name查询节点 var radios = document.getElementsByName("sex"); console.log(radios); //4.根据层次(关系)查询节点 //即查询某节点的亲戚 //1)父亲 var gz = document.getElementById("gz"); var ul = gz.parentNode; console.log(ul); //2)孩子 //带回车/空格,用的少 console.log(ul.childNodes); //只要元素,常用 var lis = ul.getElementsByTagName("li"); console.log(lis); //3)兄弟 //节点.父亲.孩子们[i] var sh = gz.parentNode.getElementsByTagName("li")[1]; console.log(sh); }
增删节点
利用父节点进行增删
function f1() { //创建新节点 var li = document.createElement("li"); li.innerHTML = "天津"; //追加新节点 var ul = document.getElementById("city"); ul.appendChild(li); } function f2() { //创建新节点 var li = document.createElement("li"); li.innerHTML = "武汉"; //插入新节点 var ul = document.getElementById("city"); var gz = document.getElementById("gz"); ul.insertBefore(li,gz); } function f3() { var ul = document.getElementById("city"); var gz = document.getElementById("gz"); //删除子节点 ul.removeChild(gz); }
自定义对象
采用直接量的方式创建对象
function f1() { var student = { "name":"zhangsan", "age":25, "work":function(){ alert("我学Java"); } }; alert(student.name); alert(student.age); student.work(); }
采用内置构造器创建对象
function f2() { var teacher = new Object(); teacher.name = "cang"; teacher.age = 18; teacher.work = function(){ alert("我教Java"); } alert(teacher.name); alert(teacher.age); teacher.work(); }
采用自定义构造器的方式创建对象
function Coder(name,age,work) { //将参数存在对象上 this.name = name; this.age = age; //this指代当前对象 //this.job是给此对象增加job属性 //=work是给这个属性赋值 this.job = work; } function f3() { var coder = new Coder( "Lisi", 28, function(){ alert("我写Java"); } ); alert(coder.name); alert(coder.age); coder.job(); }
js事件
- onfocus 元素获得焦点,光标进入文本框
- onblur 元素失去焦点,鼠标从文本框中离开
- onchange 用户改变域的内容,下拉选切换内容
- onclick 鼠标点击某个对象
- onload 某个页面或图像被完成加载
- window.onloadhtml 加载完
- onmouseover 鼠标被移到某元素之上
- onmouseout 鼠标从某元素移开
- onreset 重置按钮被点击
事件定义的方法
- 在html属性中添加事件,调用函数
- 在js代码中动态生成
btn.onclick=function(){};
取消btn.onclick=”return false;”
event是一个关键字
事件具有冒泡机制
取消冒泡的方法:
- e.stopPropagation();
- e.cancelBubble;
获取事件源
- e.srcElement()
- e.target
之所以上两个标题不同方法有相同作用,正是因为IE恶心之处。
jQuery则提供了统一方法方法,并在后面的版本中直接取消了对IE的支持。
修改样式
- 在css中使用类选择器预置不同样式
- 同过JS修改元素的class属性,以改变其样式
- Web基础之Javascript
- web基础:Javascript
- Web之Javascript基础
- WEB基础:JavaScript
- Web基础之Javascript 进阶
- [Web基础笔记]JavaScript部分
- Web基础之初识JavaScript
- Web基础之JavaScript实战
- web编程基础——javascript
- web程序设计之javascript基础(2)
- web前端 基础部分(三) JavaScript
- Web基础系列三、JavaScript(页面行为)
- Web基础之JavaScript(一)
- Web基础之JavaScript(二)
- Web基础之JavaScript(三)
- 【Web】Javascript基础之原型链
- java学习【web基础-Javascript入门】
- 《JavaScript & jQuery交互式Web前端开发》之JavaScript基础指令
- javaEE13种核心技术
- fork,Process,Pool的比较
- 判断一个序列是否是该栈的弹出顺序
- 【Unity技巧】Unity中的优化技术
- Java 使用正则表达式提取字符串制定的字符
- WEB基础:JavaScript
- 【快搭】不懂使用vim可以用EditPlus连接Linux编辑文本
- 2018腾讯实习生招聘笔试题
- Eclipse中使用SVN和Git版本管理工具
- 安卓基础8:服务和AIDL
- html5 canvas气泡动画
- 2017华为笔试题3
- sql server 表分区
- 实现中文字符串截取无乱码的方法