JavaScript学习笔记

JavaScript

-html搭建网页的结构和内容
-css用于美化页面
-JavaScript 给页面添加动态效果和内容的

JS特点

-js属于脚本语言,不需要编译,由浏览器解析执行。
-js可以嵌入到html代码中。
-js基于面向对象,属于弱型语言。

JS优点

-交互性:可以直接和用户进行交互
-安全性:js语言只能访问浏览器内部的数据,不能访问浏览器外部的内容(电脑磁盘中的各种数据)

如何引入JS代码

1、在元素的事件中书写代码
<input type="button" value="点我试试!" onclick="alert('试试就试试')" >

2、通过Script标签添加js代码
<script type="text/javascript">
alert("第二种引入方式");
</script>

3、把js代码写在单独的js文件中,通过<script>标签的src属性 引入js代码
<script type="text/javascript" src="first.js"></script>

js的数据类型

-数据类型(number)
-字符串类型(string)
-布尔值类型(boolean)
-undefine(未定义)
-对象类型

变量的声明及赋值

-由于js属于弱类型语言,声明变量时不需要指定类型
var x = 18;
var name="小明";
var isBoy=true;
x = "abc";
var m; //此时m的类型为undefined值也为undefined

数值类型

-js中底层都是浮点型,在使用过程中会自动转换整数或小数
int x = 5 / 2; //2
var x = 5 / 2;(2.5) 4/2(2)

NaN:not a number 不是一个数

isNaN():判断不是一个数,

字符串类型

-通过单引号或者双引号修饰字符串
var s1 = "abc";
var s1 = 'abv';

布尔值类型

var b1 = true;

数据类型转换

var z = "abc"+18;

-任何数字和NaN进行运算结果都为NAN

数值类型

1、数值转字符串:直接转
2、转布尔值:0和NaN转false,其他都转true
-在if括号里的类型如果不是布尔类型会自动转换

字符串类型

1、转数值:能转直接转,不能转转成NaN “100”->100 "abc"->NaN
2、转布尔值:空字符转false,其他转true ""->false "aa"->true

布尔值

1、转数值:true->1 false->0
2、转字符串: true->"true" false->"false"

undefined

1、转数值:undefined->NaN 20+undefined=NaN
2、转字符串:undefined->"undefined"
3、转布尔值:false

null 是对象类型的值

1、转数值:null->0
2、转字符串:null->"null"
3、转布尔值:null->false

JS的运算符

-和Java中的运算符大体相同
1、==和===
==会先将等号两边的变量类型统一,统一完后再比较内容
“66” == 66 true
===会先比较类型是否相同,类型相同时再比较类型
“666”===
666 false

2、两数相除会自动转换小数和整数 5/2=2.5 4/2=2

3、typeof 获取变量的类型
typeof 66 + 6 "number6"

语句

-包括:if else while do while for switch case
-需要布尔值的地方如果不是布尔值会自动转换成布尔值
-for循环中 把 int 改为var,不支持增强型for循环

函数

-第一种
function 函数名(参数列表){

    return ;
}

1、无参无返回
2、无参有返回
3、有参无返回
4、有参有返回

-第二种
var 函数名 = function(参数列表){

}

和页面元素相关的函数

1、获取页面中的元素对象
var input = document.getElementById("id");

2、为文本元素(文本框)赋值和取值
input.value="abc";//赋值
var s = input.value;//取值

3、给元素添加文本内容
元素对象.innerText=“添加内容”;

4、给元素添加HTML代码
元素对象.innerHTML="<h1>abc</h1>";

String相关api

-创建string的两种方式:
1、var s1 = “abc”;
2、var s2 = new String("abc");

-转大小写:
s1.toUpperCase();大写
s1.toLowerCase();小写

-获取某个字符串在另一个字符串中出现的位置
str.indexOf("a");//第一次出现的位置
str.lastIndexOf("a");//最后一次出现的位置

-截取字符串:
str.substring(start,[end]);

-替换字符串:(返回一个新的字符串)
str.replace("helleo","helloworld");

-拆分字符串:
var names = "刘德华,张学友,黎明".split(",");
for(var i=0;i<names.length;i++){
var name = names[i];
}

number相关函数

-四舍五入 :toFixed(2) 保留2位小数
var x = 3.1415926;
x.toFixed(3); //3.141

数组

-创建数组的两种方式:
1、var arr1=["刘德华",18,true];
2、var arr2 = new Array("刘德华",18,true);

-数组中添加元素
arr1.push("周杰伦");

-修改数组的长度:
arr2.length=2;

-数组中获取数据:数组下标 没有脚标越界
for(var i=0;i<arr2.length;i++){
var x=arr2[i];
}
-数组反转:reverse();

-数组排序:sort():
1、默认排序规则:以字符串的形式进行排序通过Unicode编码比较第一个字符比较完比较第二个字符。
2、数组中保存的对象的话可以通过以下方式排序。

日期相关

-了解服务器时间和客户端时间
1、获取客户端时间
var d1 = new Date();
2、指定时间创建时间对象 通过时间来自服务器时间
var d2= new Date("2018/08/01 18:36:50");
3、获取和设置时间戳(距离1970年1月1日 08:00:00的毫秒数);
d2.getTime(); d2.setTime(1000);
4、从date对象中获取单独的年月日时分秒 星期几
d1.getFullYear();//年
d1.getMonth();//月份需要+1,从0开始
d1.getDate();//号/日
d1.getDay();//星期几
d1.getHours();//时
d1.getMinutes();//分
d1.getSeconds();//秒
5、从date中获取年月日和获取时分秒
d1.toLocaleDateString();//2018/8/31
d1.toLocaleTimeString();//上午11:49:24

正则表达式

  • .匹配任意字符
  • \w
  • \d
  • ^
  • $

-创建正则的两种形式
1、var reg1 = /规则/模式;
2、var reg2 = new RegExp(规则,模式)//模式可省略
斜杠需要转义
-正则相关的函数
1、reg.exec(str);//查找内容,如果模式为g全局查找,执行一次查询一个
2、reg.test(str);//校验文本
-字符串和正则相关的函数
1、str.match(reg);//查找 返回值为数组
2、str.replace(reg,替换的内容);//查找并替换

创建元素对象

1、声明函数的形式创建对象:
/* function Person(name,age){
this.name=name;
this.age=age;
this.run = function(){
alert("name:"+this.name+",age:"+this.age);
}
}
//创建对象
var p = new Person("张三",18);
//调用对象的方法
p.run();
*/

//创建一个空的Person
function Person(){
    
}
//创建Person对象
var p = new Person();
//后续给对象添加属性和方法
p.name = "刘备";
p.age = 18;
p.run = function(){
    alert("name:"+this.name+",age:"+this.age);
}
//调用方法

// p.run();

2、声明变量的形式创建:

var student = {
    "name":"曹操",
    "age":28,
    "run":function(){
        alert("name:"+this.name+",age:"+this.age);
    }
}

student.run();

DHTML

-简介:Dynamic(动态)超文本标记语言。这个不是新的技术,只是把所学的HTML,css,js结合到一起实现出来的内容

-DHTML包括:BOM和DOM
-BOM:Browser(浏览器)Object(对象)Model(模型),包含以一部分和浏览器相关的对象,可以获取浏览器的请求地址,历史记录,浏览器窗口尺寸,浏览器版本。
-DOM:Document(文档)Object(对象)Model(模型)

BOM

window

-window里面的对象全称为全局对象,里面的方法称为全局方法。全局对象和方法可以省略掉window

-window中,常用的全局方法:
alert();//提示框
confirm();//确认框
promt();//弹出文本框
parseInt() parseFloat()
-window常用对象:
1、location.href获取和设置浏览器请求地址
2、location.reload()//刷新
-history 历史
1、history.length 得到历史请求页面的数量
2、history.back()返回上一个页面
3、history.forward()前往下一个页面
4、history.go(num)前往某个页面,0当前页面,1下一个页面,2下两个页面,-1上一个页面

screen 屏幕

1、screen.width/height 得到屏幕的宽高(像素)
2、screen.availWidth/availHeight //屏幕可以宽高

navigator 导航/帮助

1、navigator.userAgent 得到浏览器相关的版本信息

和window相关的事件

  • window的点击事件 onclick
    -页面加载完成事件 onload
    -获取焦点事件 onfocus
    -失去焦点事件 onblur

eval()函数

  • 可以将字符串以js代码的形式执行

通过js给元素添加css样式

  • 通过元素对象.style.样式属性名称 = "属性值";

定时器

  • setInterval(函数,时间间隔);

通过标签名查找

var elements = document.getElementsByTagName("input");

定时器

-开启定时器 var timeId = setInterval(函数,时间);
-停止定时器 clearInterval(timeID);
-setTimeouut(函数,时间)   只执行一次

DOM Document Object Model 文档对象模型

  • 学习DOM主要学习的就是对页面当中的元素进行增删改查操作

查找元素

1、通过id查找
var input = document.getElementById("id");
2、通过标签名查找
var divs = document.getElementsByTagName("div");
3、通过标签的name属性查找
var arr = document.getElementsByName("gener");
4、通过标签的class属性查找
var arr = document.getElementsByClassName("");

通过上下级关系获得元素

1、获取元素的上级元素
元素对象.parentElement 得到的是一个上级元素
2、获取元素的下级元素
元素对象.childNodes 得到的是一个数组里面装着多少元素和文本

创建元素

var div = document.createElement("div");
  • 添加到某个元素里面
    上级元素.appendChild(div);
  • 添加到某个元素的上面
    上级元素.insertBefore(div,弟弟元素);

删除元素

  • 父元素.removeChild(被删除的元素);

修改元素的文本内容

innerText()

修改元素内部的HTML

innerHTML()

修改元素的样式

元素对象.style.样式名称="样式值";

事件

onclick点击事件 onload加载完成事件 onfocus获得焦点事件 onblur失去焦点事件
onmouseover鼠标移入事件 onmouseout鼠标失去焦点事件
onchange值改变事件 onsubmit提交事件

鼠标相关事件:onclick onmouseover onmouseout onmousedown鼠标按下事件 onmousemove鼠标移动事件

  • 键盘相关事件:onkeydown(键盘按下) onkeyup(键盘抬起)

-状态改变事件:onload(页面加载完毕) onchange(值发送改变)
onbulr

以下代码获取窗口的宽高:
document.body.parentElement.clientHeight
document.body.parentElement.clientWidth

事件绑定

1、在元素中添加事件属性,在事件对应的函数中,this代表window对象
<input onclick="" >
2、通过js代码动态绑定,this代表事件源
mybtn.onclick = function(){
alert("动态绑定成功");
}

event对象

1、event对象中保存着和事件相关的信息
2、通过event可以获得鼠标事件的坐标 event.clientX/Y
3、通过event可以获得键盘事件的字符编码集 event.keyCode
4、通过event可以获得事件源 event.target event.srcElemrnt
var obj = event.target || event.srcElemrnt

事件传递(事件冒泡)

如果在同一个区域有多个事件响应,响应的顺序是类似气泡,从上往下,也就是从底层元素往上级元素执行,这个过程称为事件冒泡
如果某个元素里面有多个元素需要添加事件,则这个事件也可以

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

推荐阅读更多精彩内容

  • Learn JS NoteBook 基本概念 1.变量: (1)js的变量是松散类型的,可以用来保存任何类型的数据...
    冰镇小笼包阅读 913评论 0 20
  • 笔记来自慕课网的js和《JavaScript DOM编程艺术》一书以及《JavaScript权威指南》一书的学习。...
    恰皮阅读 718评论 3 3
  • 想开一个公众号的想法,是两个月前开始的。 大概在去年七八月的时候,我写过一篇文章叫做《对不起公众号,当我能力不够时...
    LilyanSiena阅读 765评论 2 4
  • 一 高中那会早恋,恋就恋吧,还失恋。可能总要遭遇不好的事才会想起家人的好,家人永远不会放弃你。忘了从什么时候开始,...
    南柯一梦1919阅读 246评论 0 0
  • 负能量? 不存在的! 整个一丧boy
    dahyw阅读 134评论 0 0