JavaSpcript基础
函数
代码的复用:写一遍多次使用》把特定的功能语句打包放在一起
语法:function 名字(0,1,1多个参数){
执行的语句 }
返回值return,把语句返回给函数
例子:
function add(x,y){
var z=x+y;
return z;
} var rs=add(,);
console.log(“+=”+rs);
动态参数
function add(){
var z=0;
for(var i=0;i<arguments.length;i++){
z + = arguments[i];} return z
}
var rs=add (1,2,4,5,23);
console.log("1+2 4,5,23= "rs); rs=add(3,4);
console.log("3+4= "+rs);
作用域:可访问变量的集合(对象、函数)
我们定义了一个变量,这个变量可以被使用的地府,可以使用的范围
var a=10;
全局作用域>全局变量>在函数外定义的变量>在所有地方都能被访问
局部作用域>局部变量>在函数里面的变量>函数里面被访问到
function add(){
y=100;//不设置var y=100的局部变量只设定y=100的时候 系统自动默认全
局变量
console.log("add():y="+y);
} add();
console.log("全局y="+y);
预解析:浏览器在获得JS文件的时候,不是立刻去执行代码,全篇快速扫描一遍
把变量预先解析
变量 把变量的声明提前 例如
console.log("x= "+x);
var x=10;
add();//函数也是变量
function add(){
console.log("add()");}
顺序不同也可以正常显示
但是如果在函数内部的全局变量加载顺序在console.log后面 会报错。所以注意顺序
闭包:变量的 私有化问题
<script type="text/javascript">//简化写法 函数声明和立即执行放在一起。 var plus=(function() {
var counter = 0; return function () {
counter++;
console.log("counter=" + counter);
} })( );
plus();
plus();
plus();
console.log(counter);
对象
变量var
函数function:一对语句的集合
对象:一对变量+一堆函数的集合
var boj1={X:0,y:1,z:function(){console.log(“”“”);}}}
属性: 名字: 值。
名字:string: 隐式转化为string
x123-> 可以不加引号
如果包含了特殊字符->必须加引号 例如“first name”:“cc”
如果函数构造大体相同还可以创建类
例如var person2=new person();
对象:属性的基本操作: 增加 删除 修改属性值 查询获取属性的值 遍历;
查询获取属性的 点. [] 例子
var name = person1.name;->“xiaoming”只能用没有双引号的名称
name=person["name"];
name="xiaoming"
修改
person1["name"]="xiaoming2";
person1.name="xiaoming2";
增加:修改属性的时候,如果对象里面没有这条属性,自动加上
person1.height=170;
删除
delete person1.name
遍历:
for(var 属性名 in person1){
console.log("名"+pN);}
引用、自定义类
//定义了对象
//var person1 = { name:"xiaoming", sex:"male", age:"19", slogen:function(){ console.log("w s x m");}} //xiaohong 对象 人
//用类的形式创建对象
//人的类:class
// var person2=new PersonClass();
//ES5 是 function -》ES6更新成class F需要加() C不需要加()
//为了区分函数和类 类
function PersonClass(pName,pSex,pAge){
this.name="pName";
this.sex="pSex";
this.age="pAge"
this.slogan=function(){
console.log("w s"+this.name);}
}
//构造函数方式
var person1=new PersonClass("xiaoming","male","18");
var person2=new PersonClass("xiaohong","femle","15");
命名空间:多个人命名自己的创建的变量
var cc={}; cc.Age=100; cc可以是dd可以是ee,自己创建的
系统提供很多类->用的方法
//对象 类 自定义类
//对象和类
//对象var obj1={} //var obj2=new Object();//空的对象 这两个创建的是同样的空对象
对象:值+方法
Object->打包 最底层 类
值 万物都是对象+值+方法:类型转换
数字123 ->对象 类型 Number
字符串“abc” String
布尔值true false Boolean
转换例子: var n1=123;var str1=n1.toString();更多的自己查属性词典
//时间相关;Date()
//计算代码的性能:耗时
var time1=new Date();//获取了当前的时间 本地电脑的时间
for(var i=0;<1000000;i++){
t++;}
var time2=new Date();
var n=time2.getTime()-time1.getTime();
*****Math -》 数学相关 Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math(),像 Math.sin() 这样的函数只是函数,不是某个对象的方法。您无需创建它,通过把 Math 作为对象使用就可以调用其所有属性和方法。
随机数
Math.random()
DOM弹窗(浏览器的弹窗)
同步:阻断
alert()弹窗直接弹出
confirm()boolean类型弹窗,确定为ture 取消为false 例子如下
//var bcf=confirm(“confirm弹窗”);
//console.log("点击:"+baf)
//if(bcf){提交}else
prompt()
//var strpt=prompt(“prompt 输入:”,“默认是CC”);
console.log(“填了:”+strpt);
浏览器的导航栏的信息
//window.location 对象
//属性:url的各个部分
//location.href;
//location.toString()
//刷新页面,打开新的页面 例子:
//var bcf=confirm("confirm弹窗");
//if(bcf){location.replace(“http://www.baidu.com/”)}
//else location.reload();
浏览器的历史记录:前进 后退
history
浏览器的信息:版本 厂家
navigator
//计时器
循环执行:var sil=setInterval(函数名,时间);意识是每隔多少时间执行一次函数
停掉:clearInterval(sil);
一次执行:var sil=setTimeout(函数名,时间);
clearTimeout(sil);
例子 var num=0;
function add(){
console.log("num="+ ++num);}
var sil = setInterval(add,1000);
function end(){
console.log("setTimeout clearInterval");
clearInterval(sil);}
setTimeout(end,10000);
Dom - > 文档对象模型
Dom树:
html文件 -》 人 - 》网页的数据
浏览器 -》 数据结构 - 》方便 查找 修改 遍历
样子 - 》 树
DOM树
数据结构:
线性:单链表 循环列表 队列 栈 数组
树形: 二叉树 平衡树 红黑树
网状:有向图 无向图 - 》寻路算法 A*算法
DOM树
document 节点:只有一个
标签节点 元素节点:
文本节点:
标签节点 元素节点: 样子 样式
找到这些节点
3中最常用的方法:
1通过ID来查找
2通过标签名来查找
3通过class来查找
// ID-》唯一性:
var p1 = document.getElementById("p1");
// JS时间线
var ps = document.getElementsByTagName("p1");//返回数组
var p1 = ps[ 0 ];节点
var ps = documentgetElementsByClassName("txt");//返回数组
ps【0】节点
******三个方法的区别:
1 ID -》节点
Tag(标签)Class -》数组
1.1 id-》document.getElementById只能用document来获取
Tag Class-》在标签任意节点上使用
创建节点,添加到DOM树 删除节点
var div1 = document.getElementsByTagName("div1");
//创建一个标签
var p1 = document.createElement("p");创建标签类节点
//创建一个文本节点
var ptxt = document.creatTextNode("p1");创建文本类节点
p.appendChild(p1txt);需要添加的节点
//添加节点
div1.appenChild(p);父节点
//删除节点
removeChild();
例子删除div2
var div2 = document.getElementById("div2");
div1.removeChild(div2);
同样也可以用父节点元素进行删除操作
div2.parentNode.removeChild(div2);
对节点的属性 内容
html定义好的属性 用点 . 对象的点 获取 修改
var img1 = document.getElementById("img1");
img1.id 通过获取img1 可以进行加. 进行修改
//class 因为在JS中是关键词 类 所以要用className地台
//img1.className=
//CSS样式的修改 在style后面可以加·在加属性进行修改
例如:img1.style.width=“100px”
//获取属性 修改自己创建的例如ID属性
img1.getAttribute("dat");
getAttribute()
ing1.setAttribute("dat(属性的名字)","1(属性的值)")
常用的操作属性:
getAttribute("") setAttribute("") removeAttribute("")
更改节点中文字或者其他 例如<p id="p1"> p1 </p>中的p1文字 里面可以添加任何东西 也可以加超文本链接等等
var p1 = document.getElementById("p1");
p1.inner(ID=P1标签内的所有内容)HTML(代表格式) = "这是innerHTML";
如果想单纯添加文字内容用 textContent
什么是事件:
JS-》交互 人可以去操作界面
js -》 事件驱动的方式
用户-》操作html元素-》产生一个事件-》事件 主动的调用 设定 方法 函数
事件源:产生事件的地方
事件的类型:点击 键盘
事件对象:记录好 信息
事件的处理程序:函数
两种方式:
1 html的属性:
属性名:on+时间的名字 onclick
属性值:方法
直接在html设定
通过js的元素对象来设定
点击事件例子:
var num =0;
function add(){
console.log("点击:"+ ++num);}
var div1 = docume.getelemengtById(“div1”);
div1.onclick=add;
也可以删除 div1.onclick=null;
2 通过调用 系统提供的方法
div1.addEventlistener(事件类型click,函数add,事件的处理方式可以不屑类型是布尔类型)
//事件函数:发生的时候-》操作 function
var div1 = document.getElementById("div1");
div1.addEventlistener("click",add);
事件对象 event:提供了事件的详细信息;
具体发生事件的元素,鼠标的位置,点击的状态,键盘的按键
function add(event){
console.log("事件函数");}
// var e = event || window.event; // IE8采用的方法
console.log(event);
//想要取消默认打开的超链接页面
event.preventDefault(); 用对象方法时用这个
//return false;用on来绑定事件函数的时候 用这个
}
var a1=document.getElementById("a1");
a1.addEventListener(“click”,add);
//用绑定方法也可以替代上两行代码。取消默认方法时return false;
a1.onclick=add;
上述js代码相对应的Html代码是
<body>
<div id = "div1">div1</div>
<input type="text" name="a" id="input1">
<script src="19.js"></script>
<a herf="http:www.baidu.com" target="_blank" id="a1">
百度</a>
</body>
事件的传播:
多个标签,相互嵌套的,点击页面的时候,点击事件
是不是被点中的标签才会发生点击时间(在html文件中 div2的父元素是div1)
var div1 = document getElementById("div1");
var div1 = document getElementById("div2");
div1.addEventListener("click",div1click);
div1.addEventListener("click",div2click);
function div1Click(){console.log(“div1 click”)};
function div1Click(){console.log(“div2 click”)};
事件的传播:
在默认的情况下,点击页面的一个标签,处在传播路径上的标签都会监听到对应的事件
传播路径:就是dom树的分层结构图。结构下的都可以获取到
事件流:对应标签接受到事件的顺序
两大阶段:
捕获阶段:从起始点》目标阶段
冒泡阶段:目标位置》起始位置
例如head1.addEventListener(“click”,head1Click,事件的传播,false or true)
false》head1Click 对应的函数会在冒泡阶段执行
ture》 head1Click 对应的函数会在捕获阶段执行
H5文件
<head><style>
#div1{ width:200px;height:200px;background:green;}
#div2{margin-left:200px; width:100px;height:100px;background:red;}</style></head>
<body>
<div id="div1">div1<div id="div2">div2</div></div>
<script src="20.js"></script>
<ul>
<li>li1</li>
<li>li2</li>
<li>li3</li>
<li>li4</li>
<li>li5</li>
</ul>
</body> JS文件
var div1 = document getElementById("div1"); var div1 = document getElementById("div2"); //捕获阶段
div1.addEventListener("click",div1clicktrue,true); div1.addEventListener("click",div2clicktrue,true); function div1Clicktrue(){console.log(“捕获阶段 div1 click”)}; function div1Clicktrue(){console.log(“捕获阶段 div2 click”)};
//冒泡阶段
var div1 = document getElementById("div1"); var div1 = document getElementById("div2"); div1.addEventListener("click",div1click,false); div1.addEventListener("click",div2click,false); function div1Click(){console.log(“冒泡阶段 div1 click”)}; function div1Click(){console.log(“冒泡阶段 div2 click”)}; //冒泡阶段事件代理利用冒泡流程机制
var ul1=document.getElementsByTagName("ul")[];
ul1.addEventListener("click",ulClick);
function ulClick(event){
console.log(event.target);}
JavaSpcript基础的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
随机推荐
- mac常用操作
Command+Shift+. 可以显示隐藏文件.文件夹 touch a.txt 新建txt文件
- PAT 1140 Look-and-say Sequence
1140 Look-and-say Sequence (20 分) Look-and-say sequence is a sequence of integers as the following ...
- STL 小白学习(10) map
map的构造函数 map<int, string> mapS; 数据的插入:用insert函数插入pair数据,下面举例说明 mapStudent.insert(pair<, &qu ...
- C# Winform 通过Socket实现客户端和服务端TCP通信
操作界面如下: 1.声明Socket 第一个参数:寻址方式,第二个参数:传输数据的方式,第三个参数:通信协议 Socket socket = new Socket(AddressFamily.Inte ...
- Java之for循环嵌套练习
1.打印4层*** ***** ***** ***** ***** class forfor{ public static void main(String[] args){ for(int y=0; ...
- [数]昨天欠下的一道立体几何题HDU-4741
并没有做到这道题,后来听学长说了题意,总之就是立体几何嗯 看了好几份题解,是的我知道是异面线段的距离了,可是看码完全不明orz. 这时候出现了一份清晰易懂甚至给出了公式来源的blog╰(*°▽°*)╯ ...
- BPM与OA区别
核心差异: OA解决的是流程有无问题 BPM解决的是流程更好更优的问题 主要差异如下: 1.BPM有更好的广度跟深度 这里的广度是指应用场景的广度. BPM一般都会以端到端的方式衔接企业运营过程的上下 ...
- Shadow Properties之美(一)【Microsoft Entity Framework Core随笔】
最近在做公司的项目的时候,开始把部分程序迁移到EF Core,然后有了一些感触,趁着还没忘却,还是先记录下来. EF Core还在成长中,我写这个的时候,版本是2.2.如果对着已有的EF 5/6来说, ...
- PYTHON实现算术表达式构造二叉树
LEETCOCE 224. Basic Calculator Implement a basic calculator to evaluate a simple expression string. ...
- lintcode中等题目的四道题
第一题: 第一句先创建了一个解决问题的类, 第二句声明了一个公共接口的整形链表里面有N个整形数, 第三句给链表动态初始化, 第四步判断链表里的数有没有,如果N<=0则返回结果0,否则执行Prin ...