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语言基础

变量声明

  1. JavaScript的变量名可以使用_,数字,字母,$组成,不能以数字开头。
  2. 声明变量使用 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) 返回角的正切。

 

 

 

 

posted on 2017-12-26 15:25  Py行僧  阅读(112)  评论(0编辑  收藏  举报