js变量的命名规范



1.变量名只能是 
		数字 字母 下划线 $
2.变量名命名规范(不遵循也可以)
		1.js中推荐使用驼峰式命名
			userName
			dataOfDb
		2.python推荐使用下划线的方式
			user_name
			data_of_db
3.不能用关键字作为变量名



数据类型

js也是一门面向对象 的编程语言 即一切皆对象

js/python是一门拥有动态类型

数值类型(number)

JavaScript不区分整型和浮点型,就只有一种数字类型。

ps:如何查看当前数据类型 typeof a



var a = 12.34;
var b = 20;
var c = 123e5



特殊的 NaN:数值类型 表示的意思是“不是一个数字”

(NOT A NUMBER)

类型转换

parseInt()

parseFloat()



parseInt("123")  // 返回123
parseInt("ABC")  // 返回NaN,NaN属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。
parseFloat("123.456")  // 返回123.456
parseInt('11.11')  //11返回整数部分
parseInt('123sdasdajs2312dasd')  //123返回开头



字符类型(string)



// 模版字符串
var s3 = `
asdkajsd
sdjkladj
asdjlajdkl
`
typeof s3
"string"
// 书写${} 会自动去前面找大括号里面的变量名对应的值 如果没有定义直接报错
var name = 'laoli'

var age = 18

var sss = `
   my name is ${name} and my age is ${age}
`
sss
"
   my name is laoli and my age is 18
"



// 字符串的拼接

在python中不推荐你使用+做拼接 join

在js中推荐你直接使用+做拼接

name + age

常用方法



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



布尔值(boolean)

js中布尔值是全小写的 true false

布尔值是false的有哪些

空字符串、0、null、undefined、NaN



null
	表示值为空 一般都是指定或者清空一个变量时使用
		name = 'jason'
		name = null
undefined
	表示声明了一个变量 但是没有做初始化操作(没有给值)
	函数没有指定返回值的时候 返回的也是undefined



对象(Object)

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

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

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

数组(类似于python里面的列表) []

# 不支持负数索引



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



forEach()

语法:

forEach(function(currentValue, index, arr), thisValue)




python 二维数组九宫格_python 二维数组九宫格


splice()

语法:

splice(index,howmany,item1,.....,itemX)

index

howmany

index 开始到原数组结尾的所有元素。item1, ..., itemX可选。要添加到数组的新元素


111, 222, 333, 444, 555, 666]
  ll.splice(0,3)  # 两个参数 第一个是起始位置 第二个是删除的个数
[444, 555, 666]
ll.splice(0,1,777)  # 先删除后添加
[777, 555, 666]


map()

语法:

map(function(currentValue,index,arr), thisValue)


var l1 = [11,22,33,44,55,66]
l1.map(function(value,index){return value*2},l1)
  (6) [22, 44, 66, 88, 110, 132]
l1.map(function(value,index,arr){return value*2},l1)
  (6) [22, 44, 66, 88, 110, 132]


运算符

算术运算符


var x = 10;
var res1 = x++;
var res2 = ++x;
res1 10
res2 12
++表示自增1 类似于 +=1
x++会先赋值再进行自增1运算,而++x会先进行自增运算再赋值!


比较运算符

> >= < <= != == === !==


1 == “1”  // true  弱等于
1 === "1"  // false 强等于
//上面这张情况出现的原因在于JS是一门弱类型语言(会自动转换数据类型),所以当你用两个等号进行比较时,JS内部会自动先将
//数值类型的1转换成字符串类型的1再进行比较,所以我们以后写JS涉及到比较时尽量用三等号来强制限制类型,防止判断错误


逻辑运算符

&& || !

and or not(python)


5 && '5'
'5'

0 || 1
1

!5 && '5'
5


赋值运算符

= += -= *= /=

流程控制

if(条件){条件成立之后指向的代码块}

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("...")   /条件都没有匹配上 默认走的流程
}


switch中的case子句通常都会加break语句,否则程序会继续执行后续case中的语句。

for


# 打印0-9数字
for(let i=0;i<10;i++){
  console.log(i)


while


var i = 0;
while (i < 10) {
  console.log(i);
  i++;
}


三元运算符


# python中三元运算符 res = 1 if 1>2 else 3
# JS中三元运算  res = 1>2?1:3 
条件成立取问好后面的1 不成立取冒号后面的3
var res = 2>5?8:10 # 10
var res = 2>5?8:(8>5?666:444)  # 666


函数

在js中定义函数需要用到关键字function

格式

function 函数名(形参1,形参2,形参3...){函数体代码}

无参函数


function func1(){
  console.log('hello world')
}
func1()  # 调用 加括调用


有参函数


function func2(a,b){
  console.log(a,b)
}
func2(1,2)

func2(1,2,3,4,5,6,7,8,9)  # 多了没关系 只要对应的数据


关键字arguments


function func2(a,b){
  console.log(arguments)  # 能够获取到函数接受到的所有的参数
  console.log(a,b)
}


函数的返回值 使用的也是关键字return


function index(){
  return 666
}
function index(){
  return 666,777,888,999
}
res = index();
999
res
999  # 只能拿到最后一个
----------------------
function index(){
  return [666,777,888,999]
}
# js不支持解压赋值


匿名函数 就是没有名字


function(){
  console.log('哈哈哈')
}
var res = function(){
  console.log('哈哈哈')
}


箭头函数(要了解一下) 主要用来处理简单的业务逻辑 类似于python中的匿名函数


var func1 = v => v;  """箭头左边的是形参 右边的是返回值"""
等价于
var func1 = function(v){
  return v
}

var func2 = (arg1,arg2) => arg1+arg2
等价于
var func1 = function(arg1,arg2){
  return arg1+arg2
}


函数的全局变量与局部变量

局部变量

在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。

全局变量:

在函数外声明的变量是全局变量,网页上的所有脚本和函数都能访问它。

变量生存周期:

JavaScript变量的生命期从它们被声明的时间开始。

局部变量会在函数运行以后被删除。

全局变量会在页面关闭后被删除。

作用域

首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。与python作用域关系查找一模一样!


var city = "BeiJing";
function Bar() {
  console.log(city);
}
function f() {
  var city = "ShangHai";
  return Bar;
}
var ret = f();
ret();  // 打印结果是BeiJing

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


自定义对象

你可以看成是我们python中的字典 但是js中的自定义对象要比python里面的字典操作起来更加的方便

JavaScript的对象(Object)本质上是键值对的集合(Hash结构),但是只能用字符串作为键

创建自定义对象 {}


"""第一种创建自定义对象的方式"""
var d1 = {'name':'jason','age':18}

d['name']
"jason"
d.name  # 比python从字典获取值更加的方便
"jason"
d.age
18
""第二种创建自定义对象的方式  需要使用关键字 new"""
var d2 = new Object()  # {}

d2.name = 'jason'
{name: "jason"}

d2['age'] = 18
{name: "jason", age: 18}


Date对象


# 时间对象具体方法
let d6 = new Date();
d6.getDate()  获取日
d6.getDay()		获取星期
d6.getMonth()		获取月份(0-11)
d6.getFullYear()		获取完整的年份
d6.getHours()			获取小时
d6.getMinutes()		获取分钟
d6.getSeconds()		获取秒
d6.getMilliseconds()  获取毫秒
d6.getTime()         时间戳

-------------------------					
let d3 = new Date()
Fri May 15 2020 14:41:06 GMT+0800 (中国标准时间)
   
d3.toLocaleString()
"2020/5/15 下午2:41:06"

# 也支持自己手动输入时间
let d4 = new Date('2200/11/11 11:11:11')
d4.toLocaleString()

let d5 = new Date(1111,11,11,11,11,11)
d5.toLocaleString()  # 月份从0开始0-11月
"1111/12/11 上午11:11:11"


JSON对象


在python中序列化反序列化
	dumps 		序列化
	loads		反序列化

在js中也有序列化反序列化
	JSON.stringify()	dumps
	JSON.parse()		loads			
"""
let d7 = {'name':'jason','age':18}
let res666 = JSON.stringify(d7)
"{"name":"jason","age":18}"

JSON.parse(res666)
{name: "jason", age: 18}


RegExp对象


"""
在python中如果需要使用正则 需要借助于re模块
在js中需要你创建正则对象
"""
# 第一种 有点麻烦
let reg1 = new RegExp('^[a-zA-Z][a-zA-Z0-9]{5,11}')
# 第二种 个人推荐
let reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,11}/


获取字符串里面所有的字母s


let sss = 'egondsb dsb dsb'
sss.match(/s/)  # 拿到一个就停止了
sss.match(/s/g)	# 全局匹配  g就表示全局模式


注意事项: 正则表达式中不能有空格, 全局匹配时有一个lastIndex属性


校验时不传参数
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/
reg2.test();         #什么都不传 默认传的是undefined
reg2.test(undefined);


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)      返回角的正切。