JavaScript的基本使用

JavaScript

  • JS跟Java关系就像老婆和老婆饼的关系, 两者没有半毛钱关系, 只是为了蹭热度
  • JS也叫ECMAScript

JS的使用方式

  • script标签内直接书写
    • <script>js代码</script>
  • 通过script标签src属性引入外部js文件
    • <script src="myscript.js"></script>

注释

//单行注释

/*
多行注释1
多行注释2
多行注释3
*/

变量

  • 变量声明 (需要使用关键字)
    • var 全局
    • let 局部
  • 变量名
    • 数字 字母 下划线 $
    • 不能使用关键字
    • 推荐使用驼峰体

常量

  • const关键字声明真正的常量
  • python中没有真正的常量, 只是约定俗成的将变量名大写的变量称之为常量

数据类型

  • 数值类型 number

  • 字符类型 string

  • 对象 object

    • 数组 []
    • 自定义对象 {}
  • 布尔值 boolean

  • undefined 只声明变量, 没有赋值

  • typeof 用来查看数据类型

强制类型转换

  • parse
    • parseInt(x)
    • parseString(x)

数字 (Number)

  • js不区分整型和浮点型, 就只有一种数字类型---Number
  • NaN表示的是 Not a Number
    • parseInt("abc") ---> NaN
    • typeof NaN ---> number

字符类型 (String)

方法 效果
.length 返回长度
.trim() / .trimLeft() / .trimRight() 移除空白
.charAt(n) 返回索引为n的元素
.concat(value1, value2...) 拼接
.subString(from, to) 根据索引获取子序列, 不能识别负数
.slice(start, end) 切片
.toLowerCase() 小写
.toUpperCase() 大写
.split() 分割
  • 模板字符串, 反引号``包裹的字符串
    • 可以当做普通字符串
    • 定义多行字符串
    • 在字符串中嵌入变量 ${}
//定义多行字符串
var info = `
    my name is bigb
    my age is 18
`
//嵌入变量
var name = "bigb", age = 18
`My name is ${name}, I am ${age} years old`

布尔值 (Boolean)

  • 小写ture, false
  • 0, null, 空, undefined, NaN都是false

对象之数组

方法 效果
.length 长度
.push(ele) 尾部追加元素
.pop() 获取尾部元素
.unshift(ele) 头部插入元素
.slice(start, end) 切片
.reverse() 反转
.join(seq) 将数组元素连接成字符串
concat(val, ...) 连接数组
.sort() 排序
.forEach() 将数组的每个元素专递给回调函数
.splice() 删除元素, 并向数组添加新元素
.map() 映射, 返回一个新数组, 新数组的元素是 旧数组的元素传入函数得到的结果 ( 同python的map方法相同)

运算符

  • 算数运算符+ - * / % ++ --
    • ++ 自增1
    • -- 自减1
var a = 1
var b = a++ //先赋值, 再自增, b=1, a=2
var c = ++a //先自增, 再赋值, a=3, b=3
  • 比较运算符 > >= < <= != !== == ===
    • == 弱等于, 会将两边自动转为相同的数据类型
    • === 强等于
  • 逻辑运算符
    • && and
    • || or
    • ! not
  • 赋值运算符 = += -= *= /=
    • 和Python一样

流程控制

  • if---else
// 判断语句放在小括号内, 执行语句放在大括号内

var age = 18

if (age >= 18){
    console.log("已经是大人了")
}else {
    console.log("还是个小屁孩")
}
  • if---else if---else
weather = "sunny"
if (weather=="sunny") {
    console.log("play outside")
}else if (weather=="riany") {
    console.log("sleep")
}else {
	console.log("play inside")
}
  • switch
/*
会将小括号内的表达式结果和case后的值进行匹配, 执行相应的代码块
如果没有匹配到case, 就会执行default下面的代码块
*/
switch (new Date().getDay()) {
    case 0:
		day = "Sunday";
        break
    case 6:
		day = "Saturday";
        break
    default:
        day = "work day";
}

//"Saturday"
  • for
for (var i=0;i<5;i++) {
    console.log(i)
}

/*
0
1
2
3
4
*/
  • while
var i = 0
while (i < 5) {
    console.log(i)
    i++
}

/*
0
1
2
3
4
*/
  • 三元运算
//条件成立执行?后面的代码, 条件不成立执行:后面的代码
var a = 1
var b = 2
a > b ? console.log(a) : console.log(b)

函数

  • 定义函数的关键字: function
// 语法
function 函数名(参数) {
	执行代码
	return 返回值
}

// 普通函数
function f1() {
	console.log("function without arg and return")
}

//有参函数
function sum(a, b) {
	console.log(a+b)
}

// 带有返回值(只能有一个返回值)
function rectArea(length, width) {
	area = length * width  
 	return area  
}

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

sum(1, 2) 


// 立即执行函数
(function(a, b) {
    return a + b;
})(1, 2)

// 箭头函数(js的语法是真的骚啊)
var sum = (num1, num2) => sum1 + sum2
// 等同于
function sum(num1, num2) {
    return num1 + num2
}


// arguments包含所有传入函数的参数
function sum(num1, num2) {
    console.log(arguments[0])
    return num1 + num2
}

sum(1, 2)
/*
1
3
*/
  • 函数的全局变量和局部变量
/*
局部变量
在函数内部声明的变量是局部变量, 只能在函数内部访问
只要函数运行完毕, 局部变量就会被删除

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

作用域
和python一样, 内层--->外层
*/

var city = "Beijing"
function f() {
	city = "Shanghai"
	function inner() {
		city = "Shenzhen"
		console.log(city)
    }
	inner()
}  

f()  // "Shenzhen"


内置对象和方法

  • js中一起皆对象(Python: ???)

img

  • 自定义对象
    • Object 只能用字符串作为键, 键-值
    • Map 可以使用其他类型的数据作为"键", 值-值
// 创建新对象
var person = new Object();
person.name = "bigb"
person.age = 18

console.log(person)  // {name: "bigb", age: 18}

// 创建新映射
var m = new Map()
var info = {"name":"bigb", "age":18}
m.set(info, "bigb's info")  // 添加键值
m.get(info)  // "bigb's info"
m.delete(info)

  • Date对象
// 创建新Date对象

// 不传参数
var d1 = new Date()
console.log(d1.toLocaleString())

// 传参数
var d2 = new Date("2018/6/19")
console.log(d2.toLocaleString())

// 将当前时间按照"2000-1-1 11:11 星期一"的格式输出

const WEEKMAP = {
    0: "星期天",
    1: "星期一",
    2: "星期二",
    3: "星期三",
    4: "星期四",
    5: "星期五",
    6: "星期六"
}


function showTime() {
    var d1 = new Date()
    var year = d1.getFullYear()
    var month = d1.getMonth()
    var day = d1.getDate()
    var hour = d1.getHours()
    var minute = d1.getMinutes() < 10 ? "0" + d1.getMinutes() : d1.getMinutes()

    var week = WEEKMAP[d1.getDay()]

    var strTime = `
    ${year}-${month}-${day} ${hour}:${minute} ${week} 
    `
    console.log(strTime)
}

showTime();
  • JSON对象
var str1 = '{"name": "bigb", "age": 18}'
var obj1 = {"name": "bigb", "age": 18}

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

// 对象转为JSON字符串
var str = JSON.stringify(obj1)
  • RegEXp对象
// 定义正则表达式两种方式
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}")
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/

// 正则校验数据
reg1.test('bigb666')
reg2.test('bigb666')

/*第一个注意事项,正则表达式中不能有空格*/ 

// 全局匹配
var s1 = 'egondsb dsb dsb'
s1.match(/s/)
s1.match(/s/g)
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/g
reg2.test('egondsb')
reg2.test('egondsb')
reg2.lastIndex
/*第二个注意事项,全局匹配时有一个lastIndex属性*/

// 校验时不传参数
var reg2 = /^[a-zA-Z][a-zA-Z0-9]{5,9}$/
reg2.test()
reg2.test(undefined)

var reg3 = /undefined/
reg3.test()

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

Math
posted @ 2019-11-16 19:31  MrBigB  阅读(183)  评论(0编辑  收藏  举报