前端—javascript

1、注释、引入方式

1、单行注释://

2、多行注释:/**/

3、js的引入方式:

1、script标签内部直接书写
	<script>
		alert(123)
	</script>
2、通过script标签src书写,引入外部js文件
	<script src="js.js"></script>

2、变量

2.1 变量声明

// 1、使用var声明变量
var name = "jason"

// 2、使用let声明变量
let name = "panda"

/*
两种方式的差别:循环中使用临时变量
let定义,循环体内有效,循环体结束就被删除
var定义,就是全局变量,全局有效

2.2 命名规范

/*
1、只能由数字、字母、下划线、美元符号$构成
2、不能由数字开头
3、不能时js保留字
4、推荐使用驼峰体
*/

//js保留字如下:
abstract、boolean、byte、char、class、const、debugger、double、enum、export、extends、final、float、goto
implements、import、int、interface、long、native、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile

2.3 常量

/*
1、python中的常量是约定俗成的
2、js中常量是确实存在的,不能被修改,否则会报错
3、js中使用const关键字定义常量
*/
const pi = 3.1415

2.4 数据类型

2.4.0 查看数据类型typeof

2.4.1 数值类型Number

/*在js中,只要是数,就是数值型的,即number*/
var a = 100
var b = 99.99
var c = "123"
console.log(type(a),type(b),type(c))

//number number string

2.4.2 字符类型string

// 使用''或者""来表示字符串
var name = 'wolf'
var name = "bull"
// 常用的方法,使用对象.属性的方式
name.length  //长度
name.trim()  //去除两端空白,不能填参数,不改变原值
name.trimLeft()
name.trinRight()
name.concat(value,...)  //拼接字符串,但是不推荐使用,而是推荐使用+拼接
name.charAt(n)  //n类似索引,获取索引位置的字符,超出索引时为""
name.indexOf(substring,start)  //子字符串的位置,没有返回-1
name.substring(from,to)  //同上,但是不支持负数索引
name.substr(start,length)  //从索引start开始,获取length长度的字符串
name.slice(start,end)  //切片,同python
name.toLowerCase()  //全部变小写
name.toUpperCase()  //全部变大写
name.split("delimiter",limit)  //切分,同python,返回前limit个数的几个元素,负数返回全部,小数取整
name.replace(a,b)  //同python
name.match()  //正则匹配

2.4.3 对象object

2.4.3.1 数组array

//创建、赋值
// 1、字面量创建方式,推荐使用的方式
var colors = ["red","blue","yellow"];
// 2、构造函数,关键字new
var colors2 = new Array()

// 3、通过下标赋值
colors2[0] = 1  //添加值
colors[0] = 2  //改变值
//  常用方法,使用对象.属性的方式
var color = ["red","blue","yellow"]
color.length  //同string
color.push()  //同python的append
color.pop()  //同python
color.unshift()  //头部插入元素
color.shift()  //同pop,但是是第一个元素
color.slice(start,end)  //切片,同python
color.reverse()  //倒转列表,同pyhton
color.join()  //同Python
color.concat()  //同python中list.extend(),但是这里不改变原数组
color.sort()  //同python
color.forEach()  //将每个元素传给回调函数
color.splice(1,2,3) // 1为从哪删,2为删几个,3为删除位置替换的新元素,可以是多个
color.map()  // 返回一个数组元素调用函数处理后的值的新数组
color.toString()  //转换成字符串,不包含[],不改变原数组
Array.isArray()  //判断是否为数组

2.4.3.2 JSON

var str1 = '{"name":"chao","age":18}'
var obj1 = {"name":"chao","age":18}

// JSON字符串转换成对象
var obj = JSON.parse(str1);

// 对象转换成JSON字符串
var str = JSON.stringify(obj1);

// 遍历对象中的内容,同python中遍历字典.keys()
for (var i in obj){
    console.log(i,obj[i])
}

2.4.3.3 日期Date

//定义,只能使用构造函数,关键字new
var myDate = new Date();  //date对象
//常用获取时间方法,对象.属性
myDate.getDate()  //获取一个月中的某一天(1-31)
myDate.toLocalString()  //本地时间
myDate.Date()  //返回当天的日期和时间
myDate.getMonth()  //月份(0-11)
myDate.getFullYear()  //年份
myDate.getDay()  //星期几(0-6)
myDate.getHours()  //小时(0-23)
myDate.getMinutes()  //分钟(0-59)
myDate.getSeconds()  //秒(0-59)

//设置时间的方法
https://www.runoob.com/jsref/jsref-obj-date.html

2.4.3.4 正则RegExp

创建正则对象

// 方式1:构造函数,关键字new
var reg1 = new RegExp("正则规则")

// 方式2:简写,/正则表达式/匹配模式(逗号后不要加空格)
var reg2 = /var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}")/;

正则对象常用方法 :.test()

var s1 = "aaaabbbbsd2"
reg1.test(s1)  // 传参,匹配不到false,匹配不到true

String对象与正则对象结合使用

var s = "hello world"
s.match(/o/g);  //查找内容
s.search(/h/g);  //查找位置,返回第一个,有无g都一样
s.replace(/o/g,"s")  //对字符串按正则替换

注意事项

/*
test()函数  lastIndex属性
1、带有全局标志g,test()从属性lastIndex指定处开始查找
2、lastIndex默认为0
3、找到一个时,test()将lastIndex更新为匹配内容后一位索引
4、当再次执行test(),按照此时的lastIndex查找
5、当test()找不到,lastIndex重置为0
*/
/*
test()不传参数,实际上默认传undefined,并且变成字符串undefined
*/

2.4.3.5 数学相关 Math

通过对象Math调用数学方法

Math.floor()  // 向下取整
Math.ceil()  // 向上取整
Math.max(a,b)  // 求两者较大值
Math.min(a,b)  //求两者较小值
Math.random()  //0-1之间的随机数  区间[0,1)

2.4.4 布尔值Boolean

// true  false 不能大写

2.4.5 未定义undefined

// 声明了变量,但是还没初始化赋值,代表变量还没定义
var name
console(typeof(name));

//undefined

2.5 输入输出

//  弹出警告框:alert 语句

//  控制台输出:console.log("")

//  控制台输入:prompt()
	/*
	1、必须使用变量接收输入,且都接受为字符串
	2、网页弹窗,接收用户输入

alert("大仙向南飞");
var a = prompt("请输入一个数字");

3、数据类型之间的转换

字符串转数字

// parseInt()  参数为字符串,也可以处理数字类型
/*
1、只保留字符串最开头的数字
2、取整,不四舍五入
3、若开头不是数字,则返回NaN,意为不是一个数字
*/
var a = "5.5asd22"
var b = parseInt(a);
console.log(a,b,typeof(a),typeof(b))

字符串转小数

// parseFloat()  参数为字符串,也可以处理数字类型
/*
1、只保留最开头的数字
2、能识别小数点
3、开头可以是小数点、数字,但不能是其它,否则返回Nan
*/

转字符串

// String()和.toString()
/*
String()参数为:数字,列表,字符串,等,字典不行,其他类型未测试
*/
/*
数组类型有.toString()方法,转变为字符串
*/

转布尔值

// 任何数据类型都有布尔值,Boolean()
/*
1、只有0、null、false、undefined、NaN和""的布尔值为false
2、[]、{}等空值为true
3、其他变量都为true
4、Infinity 表示无穷大
*/

var a = 123;
var b = "abc";
var a1 = Boolean(a);
var b1 = Boolean(b);
console.log(a,b,a1,b1);

4、运算符

4.1 赋值运算符

//  同pyhton
= += -= *= /= %=

4.2 比较

// 与python相似,需要注意的是等于
==  // 等于,只比较数值大小,不管类型
=== // 等同于,值和类型都相同
!=
!==
> < >= >= <= <=  // 同样值只比较大小,但是没有>==  <==

4.3 算术

// 与python相似,但是多了自增、自减,没有整除
+ - * / % 
++  // a++  先取a,在对a加1
	// ++a  先对a+1,再取a
--  // a--
	// --a

注意点:

/*
1、字符串+字符串/数字  结果是拼接字符串
2、字符串-字符串/数字  结果是按照数值相减
*/

4.4 逻辑

// 与、或、非
// &&、||、!

4.5 三元运算符

// 同c,语法如下
条件 ? 值1:值2

// 条件成立,取值1,否则取值2

5、函数

5.1 定义

// 语法
function 函数名称(){
    // 函数体
}

// 函数名命名:数字,字母、下划线、美元符号,非数字开头,非保留字

5.2 调用

// 同python
函数名();

5.3 参数和返回值

/*
1、只能返回一个值,要想返回多个,需要存储到数组或对象中
2、传入实参个数多余形参,只取前面需要的个数
3、传入实参个数小于形参,不报错,具体情况具体分析
*/

5.4 伪数组arguments

/*
1、代表的是实参
2、只在函数中使用
3、可以修改元素,但是不能改变数组长短
4、属性.length返回函数实参个数
*/
function func(a,b,c){
    console.log(arguments.length);  // 实参个数
    console.log(func.length);  // 形参个数
    console.log(arguments);  // 实参数组
    arguments[0] = "改变后的第一个实参";  // 修改实参
    console.log(arguments);
    arguments.push("想要添加实参");  // 报错,无法添加实参
}

5.5 全局与局部

1、函数内部声明的变量是局部变量,函数运行结束,就会被删除

2、函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它,网页关闭时,被删除

5.6 作用域

同python

查找顺序在定义阶段,即被确定

函数内》外层函数内》...》全局

var city = "BeiJing";
function f(){
    var city = "ShangHai";
    function inner(){
        console.log(city);
    }
    return inner;
}
var ret = f();
ret();   
// ShangHai

6、流程控制

6.1 if

// 逻辑同python,语法不一致,如下:
if (条件1) {
    // 条件1成立,执行
}else if(条件2){
    // 条件1不成立,条件2成立,执行
}else{
    // 前面的条件都不成立,执行
}

6.2 switch ... case

// 例子说明
var a = "hello"
switch(a){
        // case表示一个条件,满足即执行对应代码
    case "better":
        // break 表示终止switch,不执行下面的case判断了
        console.log("好") break;
    case "dasda":
        console.log("不好") 
}

6.3 while与do-while

// while循环,逻辑同python,语法不同,如下
while(条件){
    // 条件成立,执行
    // 遇到break,就终止循环
    // 遇到continue就跳过下面的循环体,执行下一次循环
}
// do while 同c
do{
    /*
    1、先执行循环体一次
    2、有break,continue规则
    3、当while条件成立,继续执行循环,否则终止
    */
}while(条件) 

6.4 for

// 逻辑同python,语法同c
// 以例说明
for(var i=1;i<=10;i++){
    console.log(i)
}

var arr = [1,2,3,4,5]
for(n in arr){
    // n是索引位置,此处与python不同,如果遍历的是字典,那么n就是key
    console.log(n,arr[n])
}

for(v of arr){
    // v是数组元素
    console.log(n)
}

7、面向对象

创建对象的几种常用方式:

1、Object或对象字面量创建

2、工厂模式

3、构造函数

4、原型的模式

// 只介绍Object或对象字面量
// Object
var student = new Object();
student.name = "egon";
student.age = 18;

// 对象字面量
var student = {
    name:"egon",age:18
};

8、js-BOM操作

BOM

9、js-DOM操作

DOM

posted @ 2019-11-16 15:59  W文敏W  阅读(140)  评论(0编辑  收藏  举报