JS学习

JS简介

1996年11月,JavaScript的创造者--Netscape公司,决定将JavaScript提交给国际标准化组织ECMA,希望这门语言能够成为国际标准。次年,ECMA发布262号标准文件(ECMA-262)的第一版,规定了浏览器脚本语言的标准,并将这种语言称为ECMAScript,这个版本就是1.0版。

该标准一开始就是针对JavaScript语言制定的,但是没有称其为JavaScript,有两个方面的原因。一是商标,JavaScript本身已被Netscape注册为商标。而是想体现这门语言的制定者是ECMA,而不是Netscape,这样有利于保证这门语言的开发性和中立性。

因此ECMAScript和JavaScript的关系是,前者是后者的规格,后者是前者的一种实现。

ECMAScript的历史

年份 名称 描述
1997 ECMAScript 1 第一个版本
1998 ECMAScript 2 版本变更
1999 ECMAScript 3 添加正则表达式添加try/catch
ECMAScript 4 没有发布
2009 ECMAScript 5 添加"strict mode"严格模式添加JSON支持
2011 ECMAScript 5.1 版本变更
2015 ECMAScript 6 添加类和模块
2016 ECMAScript 7 增加指数运算符(**)增加Array.prototype.include

JS基础

1.注释语法
    //单行注释
    /*多行注释*/
2.引入js的多种方式
    1.head内script标签内填写
    2.head内script标签src属性进入外部js资源
    3.body内最底部通过ecpript标签src属性引入外部js资源(最常用)
    ps:页面的加载顺序是从上往下的,所以操作标签js代码一定要等待标签加载完毕再执行才可以正常运行,否则容易报错
3.结束符号
	分好

常量与变量

"""
1.pycharm创建js文件或者html文件(适合编写较为复杂的js代码)
2.浏览器提供编写js代码的环境
"""
在js中生命变量需要使用关键字
	var
    	var name = 'jason';
   let	
		let name = 'jason';
   ps:let是ECMA6新语法,可以在局部定义变量不影响全局
    
在js中生命常量也需要使用关键字
	const
    	const pi=3.14;

基本数据类型

1.数值类型(Number)

"""
在JS中查看数据类型的方式typeof
"""
	在JS中整型与浮点型不分家,都叫Number
	NaN也属于数值类型,意思:不是一个数字(Not A Nnmber)

2.字符类型(String)

	 单引号	'jason'
 	 双引号	"jason"
    模板字符串  `jason`
	 let name1 = 'jason'
    let age1 = 18
    undefined
    let desc = `my name is ${name1} my age is ${age1}`
ps:字符串拼接推荐使用加号

常用方法:

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

3.布尔类型

JS里面的布尔值与Python不同
JS是纯小写,而Python是首字母大写

4.null与undefined

null表示值为空(曾经拥有过) undefined表示没有定义(从来没有过)

5.对象

JavaScript 中的所有事物都是对象:字符串、数值、数组、函数...此外,JavaScript 允许自定义对象。

JavaScript 提供多个内建对象,比如 String、Date、Array 等等。

对象只是带有属性和方法的特殊数据类型

对象之数组(Array)>>>:类似于python中的列表
    let l1 = []
对象之自定义对象(object)>>>:类似于python中的字典
    	let d1 = {'name':'jason','pwd':123}
       let d2 = new object();

常用方法:

方法 说明
.length 数组的大小
.push(ele) 尾部追加元素
.pop() 获取尾部的元素
.unshift(ele) 头部插入元素
.shift() 头部移除元素
.slice(start, end) 切片
.reverse() 反转
.join(seq) 将数组元素连接成字符串
.concat(val, ...) 连接数组
.sort() 排序
.forEach() 将数组的每个元素传递给回调函数
.splice() 删除元素,并向数组添加新元素。
.map() 返回一个数组元素调用函数处理后的值的新数组
关于sort()需要注意:

如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。

如果想按照其他标准进行排序,就需要提供比较函数,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:

若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。

function sortNumber(a,b){
    return a - b
}
var arr1 = [11, 100, 22, 55, 33, 44]
arr1.sort(sortNumber)

sort

6.运算符

1.算术运算符
 + - * / ++(自增1) --(自减1)
 
2.比较运算符
	> >= < <= != == === !==
    1.!=(值不等 弱) ==(值相等 弱) ===(值相等 强)  !==(值不等 强)
    ps:js在做弱等判断的时候会直接将数据类型转换统一,强等的时候不会有此操作
3.逻辑运算符
	&&(与)	||(或)	!(非)

7.流程控制

1.单if分支
	if(条件){
       条件成立执行的代码
    }
2.if...else分支
	if(条件){
        条件成立成立执行的代码
    }else{
        条件不成立执行的代码
    }
3.if...eles if ...else分支
	if(条件1){条件1成立执行的代码}
   else if(条件2){条件1不成立条件2成立执行的代码}
	else{条件1和条件2都不成立执行的代码}
4.如果分支结构中else if很多还可以考虑使用switch
	switch(条件){
        case 条件1:
        	条件1成立执行的代码;
        	break	# 如果没有break会基于某个case一致执行下去
        case 条件2:
        	条件2成立执行的代码;
        	break
        case 条件3:
        	条件3成立执行的代码
        	break
             	case 条件4:
        	条件4成立执行的代码;
        	break;
        default:
        	条件都不满足执行的代码
    }
for循环
    for(起始条件;循环条件;条件处理){	# 这里中间的符号一定是分号
        循环体代码
    }
    	for(let i=0;i<10;i++){
       	 console.log(i)
    }
 	let dd = {'name':'jason','age':18}
   for(let k in dd){
        console.log(k)
    }
	while循环
    while(循环条件){循环体代码}
"""
三元运算:
	python中:值1  if 条件 else 值2
	JS中:	条件?值1:值2
"""

8.函数

"""
python中函数的定义
	def 函数名(形参):
		'''函数注释'''
		函数体代码
		return 返回值
"""
JS函数:
function 函数名(形参){
    //函数注释
    函数体代码
    return 返回值
}

匿名函数
var s1 = function(a,b){
    return a+b;
}

箭头函数
var f=v => v;
相当于:
 var f = function(v){
     return v
 }
var sum = (num1, num2) => num1 + num2;
相当于:
var sum = function(num1, num2){
  return num1 + num2;  
}

1.JS中函数的形参与实参个数可以不对应
	串烧了就是undefined 传多了不适用
2.函数体代码中有一个关键字arguments用来接收所有的实参
3.函数的返回值如果有多个需要自己处理成一个整体(如果要返回多个值,只能将其放在数组或对象中返回)

9.内置对象

var d = new Date()

getDate()			获取日
getDay()			获取星期
getMonth()			获取月(0-11)
getFulllYear()		获取完成年份
getYear()			获取年
getHours()			获取小时
getMinutes()		获取分钟
getSeconds()		获取秒
getMilliseconds		获取毫秒
getTime()			获取累计毫秒数(从1970/1/1午夜)
toLocaleString()        根据区域时将date转为字符串(获取现在的时间)

let dd = {name:'jason',age:18}
JSON.stringify(dd)	序列化
JSON.parse(ss)		反序列化


定义正则两种方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}");
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/;
1.全局模式的规律
	lastIndex
2.test匹配数据不传默认传undefined
posted @ 2022-12-05 16:58  雪语  阅读(39)  评论(0编辑  收藏  举报