前端之JavaScript

1. 变量与常量

// 在js中声明变量,需要使用关键字var
    老版本 var(声明的全部都是全局变量)
    新版本ECMAScript6 let(可以声明局部变量)
    // 推荐使用let(实际问题不大)

// 在JS中声明常量也需要使用关键字
    const  # 声明一个真正意义上的常量

如何创建变量
    var name = 'joshua'
    let name = 'joshua'

如何创建常量
    const pi = 3.14

/*
可以编写js代码的地方
    1. pycharm提供的js文件(稍微有点麻烦)
    2. 直接使用浏览器提供的编程环境
    右键/检查/console/在这里可以编写js代码

*/
ps:pycharm在使用上述关键字的时候如果出现了报错,说明版本没有选择ECMA6+,
需要我们自定义设置 settings > langue > js...


2. 基本数据类型

python基本数据类型
	int,float,str,list,dict,bool,tuple,set

js基本数据类型
	number,string,boolean,undefined,null,object(包含py中的列表字典等)
# js也是面向对象类型



2.1 number数值类型

# 数值类型:包含了整型与浮点型
js拥有动态类型,也就是说类型可以不固定。
var x;
var x = 1;
var x = 'joshua';

# 类型转换
parseInt('123')  # 返回123
parseInt('adsfs')  # NaN Not a Number
parseInt('123.123')  # 123
parseFloat  # 转换小数

"""NaN 属于数值类型,表示的意思是Not a Number(不是一个数字)"""

# 如何查看数据类型
python中 type()

js中
typeof 'joshua'

2.2 String字符串

# 定义字符串
1. 单引号
var name1 = 'joshua'

2. 双引号
var name2 = "joshua"
var name3 = '''joshua'''  # 不可以

# 特殊名字叫做模板字符串
3. `小波浪号
var s1 = `
    joshua
    tony
`

.length                       # 返回长度
.trim()                       # 移除空白
.trimLeft()
.trimRight()
.charAt(n)                    # 返回第n个字符
.concat(value,...)            # 拼接
.indexOf(substring, start)    # 子序列位置
.substring(from, to)          # 根据索引获取子序列
.slice(start,end)             # 切片
.toLowerCase()                # 小写
.toUpperCase()                # 大写
.split(delimiter,limit)       # 分割

# 在js中字符串的拼接推荐使用 +加号

"""后面会用到,ECMA6的特性"""
# 格式化输出
var name1 = 'joshua'
var age = 18
var s2 = `my name is ${name1}, my age is ${age}`
# 大括号中是前面出现过的变量名
my name is joshua, my age is 18


2.3 Boolean布尔值类型

# 在python中布尔值类型是首字母大写
	True False

# 在js中布尔值类型是小写
	true false

空字符串,0,null,undefined,NaN都是false


2.4 null和undefined

null 表示值是空,一般在需要指定或清空一个变量时才会使用,如
name = null;

undefined表示当声明一个变量但未初始化时,该变量的默认值是undefined,
还有就是函数无明确的返回值时,返回的也是undefined

null意思是厕纸用完了
undefined意思是厕纸都没装


2.5 Object对象

对象之数组类型Array -- python-list


var a = [123, 'abc', 3.14];
console.log(a[1])  # 输出'abc'

# 对象对应方法
.length            # 数组的大小
.push(ele)         # 尾部追加元素
.pop()             # 获取尾部的元素
.unshift(ele)      # 头部插入元素
.shift()           # 头部移除元素
.slice(start,end)  # 切片
.reverse()         # 反转
.join(seq)         # 将数组元素连接成字符串
.concat(val,...)   # 连接数组
.sort()            # 排序

"重点看:"
.forEach()  将数组的每个元素传递给回调函数
l1 = [12, 34, 'joshua', 'jack', 'jason']
l1.forEach(function(n){console.log(n)})
l1.forEach(function(n,m){console.log(n,m)})
l1.forEach(function(n,m,z){console.log(n,m,z)})

.splice()      删除元素,并向数组添加新元素
.splice(n,m)   n起始删除的位置,m删除的数量

.map()         返回一个数组元素调用函数处理后的值的新数组

image

2.5 运算符

var x = 10;
var res1=x++;  # 10
var res2=++x;  # 12

"比较运算符"
# 弱等于,会自动转换数据类型至相同状态
5 == '5'  # true

# 强等于,全等于,不会自动转换数据类型
5 === '5'  # false

"逻辑运算符"
python中 and or not

js中  && || !

"赋值运算符"
= += -= *= /=


2.6 流程控制

# if判断
"python中:"
    if 条件:
        条件成立之后执行的代码
	else:
        条件不成立时执行的代码

"js中:"
    if(条件){
        条件成立之后执行的代码
    }else{
        条件不成立时执行的代码
    }

    if(条件1){
        条件1成立之后执行的代码
    }else if(条件2){
        条件2成立之后执行的代码
    }else{
        条件都不成立时执行的代码
    }


# switch
var day = new Date().getDay();
switch(day) {
    case 0:
    console.log('sunday');
    break;
    case 1:
    console.log('monday');
    break;
    default:
    console.log('...')
}
# switch中的 case子句通常都会加break,不然会一直向下执行。

# for循环
for(起始值;循环条件;自增操作){
    for循环体代码
}
for(var i=0;i<10;i++){
    console.log(i)
}

# 练习如何使用for循环取出数组内的每个元素
var l1 = [1,2,34,5,6,7]
for(let i=0;i<l1.length;i++){
    console.log(l1[i])
}


# while循环
while(循环条件){
    循环体代码
}
var i = 0;
while(i<3){
    console.log(i);
    i++;
}

2.7 三元运算符

在python中
    res = '吃饭' if 18 > 10 else '不吃饭'

在js中
    res1 = 18 > 10 ? '吃饭':'不吃饭'

3. 函数

function 函数名(参数1,参数2...){
    // 函数注释
    函数体代码
    return 返回值
}

function f1(n){
    console.log(n)
}
f1(123)  # 123
f1()     # undefined
f1(1,2,3)# 1

function f2(){
    console.log(arguments)
}
f2()
f2(1)
f2(1,2,3)

function f3(){
    if(arguments.length==1){console.log('正常执行')}else if(arguments.length==2){console.log'xxx'}else{console.log(123)}
}
"""
arguments参数 可以获取传入的所有参数
也支持return 和 匿名函数
"""

# 匿名函数则是function后面不加名字
(function(){console.log(111)})()

"箭头函数"
var f = v => v;
# 等同于
var f = function(v){
    return v;
}

4. 内置对象和方法

4.1 自定义对象

# 相当于python中的字典类型
    方式1:var d = {'name':'joshua', 'age':18}
    方式2:var d2 = Object({'name':'joshua', 'age':18})

d.name
d.age
d['name']
d.name = 'tony'   # 修改
d.hobby = 'play'  # 新增

"python也可以实现.的方式获取,需要自定义"
class MyDict(dict):
    def __getattr__(self, item):
        return self.get(item)
    def __setattr__(self, key, value):
        self[key] = value

res = MyDict(name='joshua', age=18)
print(res.name)
print(res.age)
res.xxx = 111

4.2 内置对象

# 类似于python中 的模块

# 如果需要使用内置模块,需要关键字 new
new Date()

# 产生一个日期对象
var d1 = new Date()
console.log(d1)
d1.toLocaleString()

"练习:"
编写代码,将当前日期按照"2017-12-27 11:11 星期三"格式输出





JSON对象

##################################
序列化
    js
        JSON.stringify()  # 序列化
        JSON.parse()      # 反序列化

"""
如果当前js中有一个布尔值true需要基于网络发送给python程序,
并且让python转换成布尔值,如何操作
    1. 在js中使用JSON.stringify()序列化成json格式字符串
    2. 基于网络发送给python程序(自动编码)
    3. python接收解码并反序列化
    json.loads()

"""
########################################

RegExp对象
正则对象

regexp对象
    方式1:var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
    方式2:var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}/
    # 正则校验数据
    reg1.test('jason123')

# 注意事项:正则表达式中不能有空格

# 全局匹配
# 正则表达式的最后不加 g 则表示匹配成功就结束,
# 加 g 表示全局匹配
var s1 = 'jasondsb dsb dsb'
s1.match(/d/g)

"全局匹配会有一个lastIndex属性"

reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}/
reg2.test('joshua123')

reg2.lastIndex

reg2.test()

"校验时不传参数相当于传了一个undefined"


image

math对象

// Number对象的内置方法
// toFixed(x)  保留小数位
var num = 100.3;
var ret = num.toFixed(2);
console.log(num); // 100.3
console.log(ret); // 100.30

// Math对象的内置方法
// abs(x) 返回数值的绝对值
// var num = -10;
console.log( Math.abs(num));  // 10

// ceil(x) 向上取整
var num = 10.3;
console.log( Math.ceil(num));  // 11

// floor(x) 向下取整
var num = 10.3;
console.log( Math.floor(num));  // 10

// max(x,y,z,...n)
console.log(Math.max(3,22,4)); // 22
// min(x,y,z,...n)

// pow(x,y)
console.log(Math.pow(3,2));  // 相当于3**2
console.log(3**2);  // 使用这个上面废弃

// random() 生成0-1随机数
console.log( Math.random());

// 生成0-10之间的数值
console.log( Math.random() * 10);

// round(x)  四舍五入
// 生成0-10之间的整数
console.log( Math.round( Math.random() * 10));

5. BOM 与 DOM操作

BOM
browser ojbect model
浏览器对象模型>>>:使用js操作浏览器

DOM
document object model
文档对象模型>>>:使用js操作页面

5.1 BOM操作

  • window对象
window.innerHeight  - 浏览器窗口的内部高度
window.innerWidth   - 浏览器窗口的内部宽度
window.open()       - 打开新窗口
window.close()      - 关闭窗口


  • navigator对象(了解即可)
window.navigator.appName
window.navigator.appVersion
window.navigator.userAgent
window.navigator.platform


  • screen对象

  • history对象

window.history.forward()  # 前进一页
window.history.back()     # 后退一页

  • location对象
window.location.href
# 当前页面地址

window.loaction.href = 'https://www.baidu.com/'
# 跳转到指定页面

window.location.reload
# 重新加载页面

  • 弹出框
alert('警告框')

confirm('确认框')
# 根据用户点击,返回true/false

prompt('写点什么','嘿嘿嘿')
# 返回用户输入的结果,点击取消返回null

  • 计时相关
# 毫秒为单位
setTimeout()  # 设置定时

clearTimeout()  # 取消定时

setInterval()   # 循环定时任务

clearInterval() # 取消循环定时任务

<body>
<script>
	// function func1(){
		// alert('下午困了')
	// }
	// let t = setTimeout(func1,3000)
	// clearTimeout(t)

	var t = null;
	function func2(){
		function func1(){
			alert('下午困了')
		}
		t = setInterval(func1,3000)
	}
	function func3(){
		clearInterval(t)
	}
	func2()
	setTimeout(func3,9000)

</script>
</body>

posted @ 2022-02-11 17:05  Joshua_jiaxue  阅读(41)  评论(0编辑  收藏  举报