JS-DOM和BOM操作示例
js文件内容
// 这是单行注释
/*
这是
多行
注释
*/
alert(123);
alert(321);
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<title>JS-DOM和BOM操作示例</title>
<!--<link rel="stylesheet" href="">-->
<!--<script>-->
<!--alert(123);-->
<!--</script>-->
<script src="02.js"></script>
</head>
<body>
</body>
</html>
JS语法基础
JavaScript引入方式
Script标签内写代码
<script>
// 在这里写你的JS代码
</script>
引入额外的JS文件
<script src="myscript.js"></script>
JavaScript语言规范
// 这是单行注释 /* 这是
多行注释 */
结束符
JavaScript中的语句要以分号(;)为结束符。
JavaScript语言基础
变量声明
- JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
- 声明变量使用 var 变量名; 的格式来进行声明
var name = "Alex";
var age = 18;
注意:
变量名是区分大小写的。
推荐使用驼峰式命名规则。
JavaScript数据类型
JavaScript拥有动态类型
var x; // 此时x是undefined
var x = 1; // 此时x是数字
var x = "Alex" // 此时x是字符串
数字类型
JavaScript不区分整型和浮点型,就只有一种数字类型。
var a = 12.34;
var b = 20;
var c = 123e5; // 12300000
var d = 123e-5; // 0.00123
常用方法:
parseInt("123") // 返回123
parseInt("ABC") // 返回NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。
parseFloat("123.456") // 返回123.456
字符串
var a = "Hello"
var b = "world;
var c = a + b;
console.log(c); // 得到Helloworld
常用方法:
方法 | 说明 |
obj.length | 返回长度 |
obj.trim() | 移除空白 |
obj.trimLeft() | 移除左边的空白 |
obj.trimRight() | 移除右边的空白 |
obj.charAt(n) | 返回第n个字符 |
obj.concat(value, ...) | 拼接 |
obj.indexOf(substring, start) | 子序列位置 |
obj.substring(from, to) | 根据索引获取子序列 |
obj.slice(start, end) | 切片 |
obj.toLowerCase() | 小写 |
obj.toUpperCase() | 大写 |
obj.split(delimiter, limit) | 分割 |
indexOf第二个填参数所有负数或者不填或者都会取到结果
拼接字符串一般使用“+”
布尔类型
区别于Python,true和false都是小写。
var a = true;
var b = false;
数组
类似于Python中的列表。
var a = [123, "ABC"];
console.log(a[1]); // 输出"ABC"
常用方法:
方法 | 说明 |
obj.length | 数组的大小 |
obj.push(ele) | 尾部追加元素 |
obj.pop() | 获取尾部的元素 |
obj.unshift(ele) | 头部插入元素 |
obj.shift() | 头部移除元素 |
obj.slice() | 切片 |
obj.reverse() | 反转 |
obj.join(seq) | 将数组元素连接成字符串 |
obj.concat(val, ...) | 连接数组 |
obj.sort() | 排序 |
遍历数组中的元素:
var a = [10, 20, 30, 40];
for (var i=0;i<a.length;i++) {
console.log(i);
}
对象
类似于Python中的字段数据类型
var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]);
遍历对象中的内容:
var a = {"name": "Alex", "age": 18};
for (var i in a){
console.log(i, a[i]);
}
null和undefined
- undefined表示的是当声明的变量未初始化时,该变量的默认值是undefined。还有就是函数无明确的返回值时,返回的也是undefined。
- null表示值不存在
undefined表示声明了变量,但是还没有赋值。null声明了变量并且变量是空值。
类型查询
typeof "abc" // "string"
typeof null // "object"
typeof true // "boolean"
typeof 123 // "number"
typeof是一个一元运算符(就像++,--,!,- 等一元运算符),不是一个函数,也不是一个语句。
运算符
算数运算符
+ - * / % ++ --
比较运算符
> >= < <= != == === !==
注意:
1 == “1” // true
1 === "1" // false
逻辑运算符
&& || !
赋值运算符
= += -= *= /=
流程控制
if-else
var a = 10;
if (a > 5){
console.log("yes");
}else {
console.log("no");
}
if-else if-else
var a = 10;
if (a > 5){
console.log("a > 5");
}else if (a < 5) {
console.log("a < 5");
}else {
console.log("a = 5");
}
switch
var day = new Date().getDay();
switch (day) {
case 0:
console.log("Sunday");
break;
case 1:
console.log("Monday");
break;
default:
console.log("...")
}
for
for (var i=0;i<10;i++) {
console.log(i);
}
while
var i = 0;
while (i < 10) {
console.log(i);
i++;
}
三元运算
var a = 1;
var b = 2;
var c = a > b ? a : b
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta http-equiv="x-ua-compatible" content="IE=edge">
<title>JS语法基础</title>
<script>
/*
var name; // 先声明变量
name = "Alex"; // 赋值变量
console.log(name);
var name2 = "Egon";
console.log(name2);
var n1 = 1;
var n2 = 123.456;
var n3 = 123e5;
var n4 = 123e-5;
console.log(n1, n2, n3, n4);
// 字符串常用方法
var name3 = "Alex";
var age = 18;
console.log(name3 + age);
*/
// 字符串转数字
var a = "123";
var ret = parseInt(a);
console.log(ret);
var b = "123.456";
ret = parseFloat(b);
console.log(ret);
var c = "ABC";
ret = parseInt(c);
console.log(ret);
</script>
</head>
<body>
</body>
</html>
*****今日小结*****
1.JS语言基础:
1.基本数据类型
2.变量
3.流程控制
4.语法/注释
5.函数
6.对象
2.DOM和BOM编程
DOM --> Document Object Model
BOM --> Browser Object Model
JS语法基础:
语句结束之后要写分号; *****
$也可以做变量名
推荐使用驼峰命名
JS数据类型:
数字类型
字符串类型
字符串自带的那些属性和方法
字符串转数字
布尔类型
数组
数组的内置属性和方法
数组的遍历
var i = 0;
i++; i= i+1; --> i+=1(Python);
对象(简单的对象)
对象的遍历
条件判断和循环
if... else ...
if... else if...else
switch
case 值1: 要做的事儿;break;
case 值2: 要做的事儿;break;
default: 条件都不满足默认执行的
for 循环
for (var i=0;条件;i++){
循环要做的事儿;
}
while循环
while (条件){
循环要做的事儿;
}
三元运算
条件 ? 值1: 值2
函数
函数定义
JavaScript中的函数和Python中的非常类似,只是定义方式有点区别。
// 普通函数定义
function f1() {
console.log("Hello world!");
}
// 带参数的函数
function f2(a, b) {
console.log(arguments); // 内置的arguments对象
console.log(arguments.length);
console.log(a, b);
}
// 带返回值的函数
function sum(a, b){
return a + b;
}
sum(1, 2); // 调用函数
// 匿名函数方式
var sum = function(a, b){
return a + b;
}
sum(1, 2);
// 立即执行函数
(function(a, b){
return a + b;
})(1, 2);
函数的全局变量和局部变量
局部变量:
在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。
全局变量:
在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。
变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。
局部变量会在函数运行以后被删除。
全局变量会在页面关闭后被删除。
作用域
首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。
几个例子:
1.
var city = "BeiJing";
function f() {
var city = "ShangHai";
function inner(){
var city = "ShenZhen";
console.log(city);
}
inner();
}
f(); //输出结果是shenzhen
2.
var city = "BeiJing";
function Bar() {
console.log(city);
}
function f() {
var city = "ShangHai";
return Bar;
}
var ret = f();
ret(); // 打印结果是beijing
3.闭包
var city = "BeiJing";
function f(){
var city = "ShangHai";
function inner(){
console.log(city);
}
return inner;
}
var ret = f();
ret(); #shanghai
内置对象和方法
JavaScript中的所有事物都是对象:字符串、数字、数组、日期,等等。在JavaScript中,对象是拥有属性和方法的数据。
我们在学习基本数据类型的时候已经带大家了解了,JavaScript中的Number对象、String对象、Array对象等。
自定义对象
类似于(某方面类似)Python中的字典数据类型
var a = {"name": "Alex", "age": 18};
console.log(a.name);
console.log(a["age"]);
遍历对象中的内容:
var a = {"name": "Alex", "age": 18};
for (var i in a){
console.log(i, a[i]);
}
创建对象:
var person=new Object(); // 创建一个person对象
person.name="Alex"; // person对象的name属性
person.age=18; // person对象的age属性
JS函数示例
// 最基础的函数定义
function f1() {
console.log("Hello world!");
}
f1();
// 带参数的函数
function f2(name, age) {
console.log("姓名:" + name + "年龄:" + age);
}
f2("Alex", 18);
// 带返回值的函数
function f3(arg1, arg2) {
return arg1 + arg2;
}
var s = f3("Alex", "帅B");
console.log(s);
// 匿名函数
var sum = function (arg1, arg2) {
return arg1 + arg2;
};
ret = sum(1, 2);
console.log(ret);
var n; // 提前声明要使用的全局变量
// 自执行函数
(function (arg1, arg2) {
// n = 1000; // 相当于定义了一个全局变量
n = 1000;
var m = 100;
console.log("自执行函数:" + (arg1 + arg2));
})(10, 20);
Date对象
创建Date对象
//方法1:不指定参数
var d1 = new Date();
console.log(d1.toLocaleString());
//方法2:参数为日期字符串
var d2 = new Date("2004/3/20 11:12");
console.log(d2.toLocaleString());
var d3 = new Date("04/03/20 11:12");
console.log(d3.toLocaleString());
//方法3:参数为毫秒数
var d3 = new Date(5000);
console.log(d3.toLocaleString());
console.log(d3.toUTCString());
//方法4:参数为年月日小时分钟秒毫秒
var d4 = new Date(2004,2,20,11,12,0,300);
console.log(d4.toLocaleString()); //毫秒并不直接显示
Date对象的方法:
var d = new Date();
//getDate() 获取日
//getDay () 获取星期
//getMonth () 获取月(0-11)
//getFullYear () 获取完整年份
//getYear () 获取年
//getHours () 获取小时
//getMinutes () 获取分钟
//getSeconds () 获取秒
//getMilliseconds () 获取毫秒
//getTime () 返回累计毫秒数(从1970/1/1午夜)
Date示例:
编写代码,将当前日期按“2017-12-27 11:11 星期三”格式输出。
function getNow() {
var d = new Date(); // 获取当前的日期对象
var dYear = d.getFullYear(); // 获取当前年份
var dMonth = d.getMonth(); // 获取当前月份
var dDate = d.getDate(); // 获取当前日期
var dHour = d.getHours(); // 获取当前小时
var dMinute = d.getMinutes(); // 获取当前分钟
var dWeek = d.getDay(); // 获取当前星期
var weekStr = [ "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"];
if (dMinute < 10){
dMinute = "0" + dMinute;
}
console.log(dYear + "-" + (dMonth+1) + "-" + dDate + " " + dHour + ":" + dMinute + " " + weekStr[dWeek]);
}
getNow();
另外一种方法
var d=new Date("2017/12/27 10:35");
var dweek=d.getDay();
var n;
switch (d.getDay()) {
case 0:{
n="星期日" ;}break;
case 1:{
n="星期一" ;}break;
case 2:{
n="星期二";}break;
case 3:{
n="星期三";}break;
case 4:{
n="星期四";}break;
case 5:{
n="星期五" ;}break;
case 6:{
n="星期六" ;}
}
console.log(d.getFullYear()+"-"+(d.getMonth()+1)+"-"+d.getDate()+" "+d.getHours()+":"+d.getMinutes()+" "+n );
JSON对象
var str1 = '{"name": "Alex", "age": 18}';
var obj1 = {"name": "Alex", "age": 18};
// JSON字符串转换成对象
var obj = JSON.parse(str1);
// 对象转换成JSON字符串
var str = JSON.stringify(obj1);
JSON序列化示例
// JSON序列化和反序列化
var o = {"name": "Alex", "age": 18};
// 序列化
var s = JSON.stringify(o);
console.log(o, typeof o);
console.log(s, typeof s);
// 反序列化
var obj = JSON.parse(s);
console.log(obj, typeof obj);
RegExp对象
//RegExp对象
//创建正则对象方式1
// 参数1 正则表达式
// 参数2 验证模式:g(global)和i(忽略大小写)
// 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。
// 创建RegExp对象方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g");
// 匹配响应的字符串
var s1 = "bc123";
//RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
reg1.test(s1); // true
// 创建方式2
// /填写正则表达式/匹配模式
var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;
reg2.test(s1); // true
// String对象与正则结合的4个方法
var s2 = "hello world";
s2.match(/o/g); // ["o", "o"] 查找字符串中 符合正则 的内容
s2.search(/h/g); // 0 查找字符串中符合正则表达式的内容位置
s2.split(/o/g); // ["hell", " w", "rld"] 按照正则表达式对字符串进行切割
s2.replace(/o/g, "s"); // "hells wsrld" 对字符串按照正则进行替换
正则相关示例:
// 正则相关的示例
// 方式1
// 第一个参数: 正则表达式
// 第二个参数: 匹配模式
var r1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g");
var s1 = "alex123";
var s2 = "123alex";
console.log(r1.test());
console.log(r1.test());
var r2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/g;
console.log(r2.test(s1));
console.log(r2.test(s2));
// 与字符串自带的方法结合
var s = "alex 18";
ret1 = s.search("a");
ret2 = s.search(/[0-9]{2}/g);
console.log(ret1);
console.log(ret2);
Math对象
abs(x) 返回数的绝对值。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。
*****本章总结*****
JS语法基础部分
1. JS发展史 ES6 (ECMAScript 2016)
2. JS代码在HTML中的两种引用方式
1. <script>直接写代码</script>
2. 1. <script src="js文件"></script>
3. 注释
1. 单行注释 //
2. 多行注释 /* ... */
4. 语句结束符 --> ;
5. 变量命名规范
1. 数字、字母、下划线、$
2. 不能以数字开头
3. 推荐使用驼峰命名方式
JS数据类型
1. 数字类型
1. 常用属性和方法
parseInt()
parseFloat()
NaN --> 表示非数字
2. 字符串类型
1. 字符串常用属性和方法
3. 布尔类型
true和false
4. 数组
类似于Python中的列表
sort()是有毒的
5. 对象
类似于Python中的字典
6. 判断数据类型 --> typeof
7. null和undefined
null --> 表示值为空
undefined --> 表示变量声明了但是没有赋值/函数没有定义返回值默认返回undefined
运算符
1. 数学运算符
2. 逻辑运算符
3. 比较运算符
1. ==
2. === 强等于 --> 既判断类型也判断值
4. 赋值运算符
5. 三元运算
条件 ? 值1: 值2 --> 条件是true是值1,false的话就是值2
Python里面的三元运算:
值1 if 条件 else 值2
条件判断和流程控制
if判断
if (条件) {
条件成立要做的事儿;
} else {
条件不成立要做的事儿;
}
if (条件) {
条件成立要做的事儿;
} else if (条件2) {
条件2成立要做的事儿;
} else {
条件都不成立要做的事儿;
}
switch
switch (v) {
case 值1: 执行的代码;break;
case 值2: 执行的代码;break;
case 值3: 执行的代码;break;
default: 上面条件都不成立执行的代码;
}
注意:
break;
for循环
for (var i=0;i<长度;i++) {
循环执行的代码;
}
for (var i in obj) {
console.log(i);
}
while循环
while (条件) {
循环执行的代码;
}
函数 *****
1. 函数的定义
function 函数名(参数1, 参数2){
函数体;
return 返回值;
}
匿名函数
python中是 lambda --> lambda 参数: 返回值
JS中
自执行函数
(function(){})(arg);
闭包
类似于Python中
内部函数可以访问外部函数的变量
2. Date对象
1. month是0~11
2. day是星期,0~6
3. 获取年份用.getFullYear
3. JSON序列化 *****
python中:
1. import json
2. 序列化(把对象转换成字符串) --> json.dumps(obj)
3. 反序列化(把字符串转换回对象) --> json.loads(str)
JS中:
1. 序列化(把对象转换成字符串) --> JSON.stringify(obj)
2. 反序列化(把字符串转换回对象) --> json.parse(str)
4. 正则表达式
1. Python里面:
1. import re
2. p1 = re.compile("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")
3. p1.match()
4. p1.search()
5. p1.findall()
匹配模式:
忽略大小写 re.I
贪婪匹配
2. JS
两种方式:
1. RegExp对象方式
1. var p = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$", "g")
2. p.test(str)
2. 简写方式
/正则表达式/匹配模式
5. Math对象
Python里面:
直接使用max\min
JS里面:
通过Math对象来做数学相关操作的
Math.
abs(x) 返回数的绝对值。
exp(x) 返回 e 的指数。
floor(x) 对数进行下舍入。
log(x) 返回数的自然对数(底为e)。
max(x,y) 返回 x 和 y 中的最高值。
min(x,y) 返回 x 和 y 中的最低值。
pow(x,y) 返回 x 的 y 次幂。
random() 返回 0 ~ 1 之间的随机数。
round(x) 把数四舍五入为最接近的整数。
sin(x) 返回数的正弦。
sqrt(x) 返回数的平方根。
tan(x) 返回角的正切。