javascript基础笔记

JavaScript基础笔记

JavaScript介绍

JavaScript运行在浏览器里面的脚本语言-编程语言
什么是编程语言-人为的设定一些步骤,让计算机去执行

js能做什么?

  • 表单验证
  • 页面特效
  • 炫酷对象
  • ……

js的引入方式

  • 外联式
    只需要使用script标签,引入src属性,指定它的路径
<script src="./index.js"></script>
  • 行内式
<input type="button" value="按钮" onclick="alert("这是行内式使用js")">
  • 嵌入式
<script>alert("这是内嵌式")</script>

js提供的输入输出方式

  • alert(“提示”);作用:弹出一个提示框
  • prompt(“请输入”) // 输入框
  • console.log(“打印输出”) // 浏览器控制台打印输出
  • confirm(“您确定删除吗?”) // 确认弹出提示框

js变量

变量:数据的容器,直接代表了一个数据
语法: var 变量名 = 数据
例子:

<script>
var pwd = prompt("请输入您的银行卡密码");
console.log(pwd);
</script>

变量的命名规范

  • 数字、字母、_、$
  • 不能以数字开头
  • 不能使用关键字,也不能使用保留字
  • 严格区分大小写
  • 命名要有意义
  • 使用驼峰命名(firstName)

变量的细节

  • 要先声明之后才能使用。 console.log(a) // undefined
  • 声明一次之后,就可以不用再次声明,var a = 10; a=20;
  • 变量可以作为另一变量的值,var n1 = 10;n2 = n1;
  • 声明和赋值可以分开;var a; a = 10;
  • 可以一次声明多个变量;var a,b,c; var a=10,b=20,c=30;

js的数据类型

分为:基本数据类型、复杂数据类型

基本数据类型

  • 数字(Number)
  • 字符串(String)
  • 布尔(Boolean)
  • 空(null)
  • 未定义(undefined)
  • Symbol 是ES6引入一种新的原始数据类型,表示独一无二的量
数字类型(Number)

数字 + 小数
例子:

var x1 = 34.0
var x2 = 34
字符串(String)

字符串可以是引号中的任意文本,可以使用单引号或双引号

var str1 = 'name';
var str2 = "小明";
console.log(str1.length) // 获取字符串的长度
布尔(Boolean)

这个类型用来表示真 和 假

var isBtn = true;
未定义(undefined)

声明了,但是没有赋值
如果声明了变量,没有赋值,默认就是undefined

空(null)

什么都没有,通常都是得到的结果null ,很少主动使用

var res = prompt("请输入一个名字")
console.log(res) // 如果点的是取消,得到的就是null

复杂数据类型

  • 对象(Object)
  • 数组(Array)
  • 函数(Function)

数据类型转换

将其他转换为数字

Number()

console.log(Number("123")) // 123
console.log(Number("abc")) // NaN 不是一个数字,Not a Number
console.log(Number(true)) // 1
console.log(Number(false)) // 0
console.log(Number(null)) // 0
console.log(Number(undefined)) // NaN

parseInt() 转换为整数

console.log(parseInt("3000") // 3000
console.log(parseInt("3000.04")  // 3000
console.log(parseInt("3000abc") // 3000
// 是一个专门用来转换为数字的方法,会逐个转换

parseFloat() 转换为小数

console.log("3.1415926") // 3.1415926
console.log("3.14aaa") // 3.14

将其他转换为字符串

String(任何数据)

var res = String(3000) // 3000
var res = String(true) // true
var res = String(false) // false
var res = String(null) // null
var res = String(undefined) // undefined

数据.toString()

console.log(true.toString()) // true
console.log(false.toString()) // false
console.log((300).toString()) // 300 ,数字需要加小括号
console.log(undefined.toString()) // 报错
console.log(null.toString()) // 报错
// undefined 和 null 不能点出任何东西

其他数据类型转换为布尔(Boolean)

// js 中只有这些是false,其他为true
console.log(Boolean(0)) // false
console.log(Boolean('')) // false
console.log(Boolean(null)) // false
console.log(Boolean(undefined)) // false
console.log(Boolean(NaN)) // false
console.log(Boolean(false)) // false
// 转为true 的举例
console.log(Boolean(1)) // true
console.log(Boolean("123")) // true

运算符

算数运算符

+(加)、-(减)、*(乘)、/(除)、%(取余)

console.log(5 + 2) // 7
console.log(5 - 2) // 3
console.log(5 * 2) // 10
console.log(5 / 2) // 2.5
console.log(5 % 2) // 1

比较运算符

>(大于) 、< (小于)、>=(大于等于)、<=(小于等于)、==(相等)、===(全等)、!=(不相等)、!==(不全等)

console.log('4'==4) // true
console.log('4'=== 4) // false
console.log(undefined == null) // true
console.log(undefined === null) // false
// === 严格判断,要判断内容相等之外,还要判断类型是否相等
  • && 多个条件同时成立时
  • || 只要有一个条件成立即可
  • ! 取反

赋值

变量 = 值
sum = sum +1;

符合赋值运算

+= 、-=、*=、/=、%=

sum+=1  // 等价于 sum = sum + 1

自增、自减

数据在自身的基础 +1或者 -1

var a= 1
a= a+1 // 等价于 a+=1 等价于 a++
a = a-1 // 等价于 a-=1 等价于 a--

++ 在前:先自增,使用自增后的值进行运算
++ 在后:先使用原来的值进行运算,然后再自增

例子:

var a = 10;
console.log(a++) // 10
console.log(++a) // 11
console.log(a) // 11
var a = 10 
var b = a ++ + ++a
console.log(b) // 22

js的组成(补充)

ECMAScript-简称es,目前主要学习es5,
DOM-Document Object Model 文档对象模型,是js里面提供的一套操作页面元素的写法
BOM-Brower Object Model 浏览器对象模型,是js里面提供的一套操作浏览器的写法

分支结构

if语句

// if 语句,通常使用判断区间,复杂的条件
if(条件){}
// if...else
if(条件){}else{}
// if...else if ...else
if(条件){
	...
}else if(条件){
	...
}else{
	...
}

三元运算符

固定语法:
条件 ? 条件为true的代码 : 条件为false的代码

switch语句

// switch 判断,固定值
switch(数据){
	case 固定值1:
		数据和固定值1完全相等的代码
		break
	case 固定值2:
		数据和固定值2完全相等的代码
	 	break
	...
	default:
		上面的条件都不成立时,执行的代码
}

例子:

var gender = "男"
switch(gender){
	case "男":
	console.log("我是男生")
	break;
	case "女":
	console.log("我是女生")
	break;
	default:
	console.log("我是未知")
}

循环

重复的做一件事情

while 循环

// 固定语法
while(条件){
	条件为true就会重复执行的代码,循环体
}

例子:

var time = 0;
while(time<3){
console.log("我是循环体")
time++;
}

执行过程:

  • 判断条件
  • 如果条件为true,就执行循环体
  • 循环体执行完毕,会判断条件
  • 如果条件为true,就会重复1-3,直到条件为false

结束循环

break关键字:
两个作用:

  • 结束switch
  • 结束循环
while(true){
	console.log(1) // 控制台会打印一次
	break
}

for 循环

// 语法:
for(初始化表达式;条件表达式;自增表达式){
	循环体
}

例子:

for(var i=0;i<3;i++){
	console.log('我是for循环')
}

执行过程:

  • 先执行初始化表达式
  • 判断条件是否成立
  • 如果条件成立,执行循环体
  • 循环体执行完毕,会执行自增表达式
  • 重复2-4步,直到条件为false,结束循环
    例子:求1-100的和
var sum = 0;
for(var i=1;i<=100;i++){
	sum =sum+i
}
console.log(sum) // 5050

例子:循环生成图片

for(var i=0;i<40;i++){
	document.write('<img src="./images/xxx.png"/>')
}

do…while循环

// 固定语法
do{
 	循环体
}while(true)

执行过程:

  • 先执行一次循环体
  • 再判断条件
  • 如果条件成立,就两次执行循环体
  • 重复2和3步,直到条件为false,结束循环
    while和do…while的区别
  • while循环如果条件为false,会一次都不执行
  • do… while 会至少执行一次循环体

break 和 continue

break 是终止循环,continue是跳过本次循环,继续执行下次循环

综合练习

智能机器人:

<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>机器人练习</title>
</head>

<body>
    <script>
        /**
                                                                                                                                                                                                    功能分析:
                                                                                                                                                                                                    1.循环的弹出询问你要做什么?
                                                                                                                                                                                                    2.如果输入1,可以计算多个数字的和
                                                                                                                                                                                                    3.如果输入2,得到当前的时间
                                                                                                                                                                                                    4.如果输入3,点播歌曲
                                                                                                                                                                                                    5.如果输入q,结束聊天

                                                                                                                                                                                                    */
        // 1.循环的弹出询问你要做什么
        // 未知次数,使用while循环
        while (true) {
            // 1.1 弹出输入框,不同的浏览器需要使用 \r\n 才能换行
            var msg = prompt("你好,我是您的智能助手,请输入下面的选项,决定功能:\n1.如果输入1,可以计算过个数字的和\n2.如果输入2,得到当前的时间\n3.如果输入3,点播歌曲\4..如果输入q,结束聊天")

            // 5.如果输入1,结束聊天
            if (msg === 'q') {
                // 为了用户体验-要通知一下用户,使用结束
                alert('主人,奴才这就退下')
                break
            }
            // 2.如果输入1,可以计算多个数字的和
            // 判断输入的是否是1
            switch (msg) {
                case '1': // 注意,这个是1不能是数字
                    // 弹出一个输入框,让用户输入多个数字
                    var nums = prompt("请输入多个数字,使用,隔开,例如:1,2,3,4")
                        // console.log(nums.split(','))
                    var arr = nums.split(',')
                    var sum = 0
                    for (var i = 0; i < arr.length; i++) {
                        sum += parseFloat(arr[i])
                    }
                    console.log(sum)
                        // 2.5 提示
                    alert('总和是:' + sum)
                    break
                    // 如果输入2得到系统当前时间
                case '2':
                    // 1.创建一个日期对象
                    var date = new Date()
                        // 得到里面的年月日
                    var y = date.getFullYear()
                        // console.log(y)
                    var month = date.getMonth() + 1 // 月份从 0 开始 
                        // var day = date.getDay() // 获取星期,一周是从周日开始的,周日是0
                    var d = date.getDate() // 获取日期
                    var h = date.getHours() // 获取小时
                    var m = date.getMinutes() // 获取分钟
                    var s = date.getSeconds() // 获取秒
                        // 把需要补0的先补上
                    if (month < 10) {
                        month = '0' + month
                    }
                    if (d < 10) {
                        d = '0' + d
                    }
                    if (h < 10) {
                        h = '0' + h
                    }
                    if (m < 10) {
                        m = '0' + h
                    }
                    if (s < 10) {
                        s = '0' + s
                    }
                    var time = y + '-' + month + '-' + d + ' ' + h + ':' + m + ':' + s
                        // var time = y + '-' + month + '-' + d + ' ' + h + ':' + m + ':' + s
                    console.log(time)
                    alert('现在时间:' + time)
                    break
            }
        }
    </script>
</body>

</html>

数组

概念:存储大量数据,有顺序,有长度的数据集合;

// 声明数组的方式
// 方式一:构造函数
var arr = new Array()
// 方式二:字面量
var arr = []
// 存储数据
var arr = [];
arr[0] = "张飞"
arr[1] = "关羽"
// 从数组中取出数据使用
// 数组[索引] 可以认为这就是一个变量
console.log(arr[0])
// 数组初始化:字面量方式
var arr = [1,2,3.4]
// 数组初始化:构造函数方式
var arr = new Array(1,2,3,4)
// 注意:new 关键字初始化时,如果括号里面是一个数字型,默认是该数组的长度
var arr = new Array(100)
console.log(arr) // []

例子:求一个数组里面多个成绩的和

var score = [1,2,3,4,5]
var sum = 0;
for(var i=0;i<score.length;i++){
	sum +=score[i]
}
console.log(sum) // 15

例子:求一个数组中的最大值

// 1.使用一个变量表示两个数之间的更大者
// 2.两个数字比较,得出更大的那个,再跟下个比较
// 先假设第0个是最大的
// 循环的使用max 和下一个数相比较
var arr = [99,100,45,72,56,111];
var max = arr[0]
for(var i =1;i<arr.length;i++){
	if(max < arr[i]){
		max = arr[i]
	}
}
console.log(max) // 11

例子:翻转数组

 var arr = [1, 2, 3, 4, 5]
 	// 方式一
            // var arr2 = []
            // for (var i = 0; i < arr.length; i++) {
            //     arr2[i] = arr[arr.length - 1 - i]
            // }
    // 方式二 把两个数据交换位置
        for (var i = 0; i < arr.length / 2; i++) {
            const temp = arr[i]
            arr[i] = arr[arr.length - 1 - i]
            arr[arr.length - 1 - i] = temp
        }
        console.log(arr)

函数

函数就是一段可以在特定的时机重复使用的代码段-类似于一个月饼模子,只需要使用起来,就可以得到结果

作用

可以让一段代码在特定的时机使用,也可以重复使用

固定语法

function 函数名(){
	函数体需要重复时候用的代码
}

注意点

函数里面的代码是不会执行,需要调用才会执行

特点

函数声明后,里面的代码不会执行,必须调用才会执行
调用: 函数名()

函数参数

function 函数名(参数1,参数2,参数3){
	函数体
}

当函数调用的时候,要把实际的数据传入函数里面
例如: 函数名(数据)

函数的返回值

函数执行过后,得到一个结果,默认就是undefined,如果想要修改,函数的执行结果:使用return

function add(a,b){
	var sum = a + b;
	return sum;
}
var sum = add(1,2) // 3

return 关键字

作用:

  • 1.修改函数的返回值
  • 2.终止函数的执行

函数的参数

形参:形式参数,在声明函数的时候,代替数据在代码里面执行的
实参:实际参数,在调用函数的时候,实际参与函数执行的数据
结论:形参里面的数据变了,实参不会变(基础数据类型)

函数的作用域

变量和函数的有效范围
全局:在页面中的任何位置都能使用,在<script>之下直接声明的,都是全局变量。
局部:在某个函数内部或代码块中
为什么要有作用域?
如果全局的变量,会造成后面的同名变量,覆盖前面的变量的效果,称为变量污染
所以需要一个范围把污染隔绝,避免变量污染。如果要写多个函数,隔绝污染,函数名又要不同-函数名也可能重名
解决办法:可以让函数没有名字,自调用函数

(function(){
	var a = 10;
	console.log(a)
})()

函数预解析:

// 关键字声明
function fn(){
	console.log(1)
}
// 函数表达式
var f2 = function(){
	 console.log(2)
}

js在执行之前,会由js解析引擎(v8)把代码先解析一遍
做的事情:

  • 1.把变量和函数的声明提前到当前作用域的最顶端
  • 2.变量的赋值和函数的调用还是在原来的位置
    变量提升: 关键字声明的函数会变量提升

arguments 对象

函数中的arguments对象,函数里面的自带的,在函数体重获取实参
作用:可以解决任意个实参的问题
注意:

  • 1.是函数里面自带的,不需要声明
  • 2.arguments只能在函数内部使用
  • 3.可以得到函数被调用的时候所有的实参
function add(a,b){
	console.log(arguments) // [1,2,3] 是一个类数组 ,实参的集合
}
add(1,2,3)

函数的短路运算

一般是形参比实参多的情况下

	function add(a,b,c,d){
		d = d || 0;
		return a + b + c + d
	}
	add(10,20,30)

对象

对象是无序键值对的集合,其实就是一个结构,这个结构可以存储复杂的数据
{键:值}
作用:

  • 1.描述复杂的数据
  • 2.封装代码

对象语法

// 1.创建对象
var obj = new Object() // new 关键字 构造函数
var obj = {} // 字面量

// 描述对象
// 特征 ---- 属性
// 行为-----方法

// 添加属性
// 对象[属性名] = 值
// 对象.属性名 = 值

// 添加方法
// 对象.方法名 = function() {}
// 对象[方法名]= function() {}

// 访问属性和方法
// 对象.属性名
// 对象.方法名  ======= Math.random()

// 字面量简写的写法
var obj = {1:值1,
	key2:value2
}

for …in 遍历对象

语法

for(varin 对象){
	// 键就是属性名
}
// 实际举例
for(var key in obj){
	console.log(key) // obj 的每一个属性名
	console.log(obj[key]) // obj 的每一个属性值
}

构造函数

function Person(name,age,gender){
	this.name = name;
	this.age = age;
	this.gender = gender;
}
var xiaoming = new Person('小明',18,'男')
console.log(xiaoming)

new 关键字

作用:配合构造函数,创建实例对象
new的过程:

  • 1.创建一个对象
  • 2.调用构造函数
  • 3.把this指向指向第一步,创建的对象
  • 4.执行构造函数里面的代码,给this添加属性和方法
  • 5.返回this

引用类型和值类型的区别

基本(值)数据类型:存储在内存的栈空间
复杂(引用)数据类型:存储在内存的堆空间
结论:
1.函数传参,值类型传参,形参变了,实参不变
2.引用类型,形参变了,实参变

Math内置对象

Math.random() // 随机数
Math.ceil() // 向上取整
Math.floor() // 向下取整
Math.round() // 四舍五入
更多方法可以参考mdn
例子:点击事件,生成随机颜色

function randomInt(min,max){
	return Math.floor(Math.random()*(max-min + 1)) +min
}
var btn = document.getElementById('btn')
btn.onclick = function(){
	var r = randomInt(0,255)
	var g = randomInt(0,255)
	var b = randomInt(0,255)
	var color = `rgb(${r},${g},${b})`
	// 修改body的背景色
	document.body.style.backgroundColor = color;
}

分析:点击按钮,让body的背景色随机变化

  • 写一个按钮
  • 获取按钮 byId
  • onclick
  • 生成三个随机整数 0-255
  • 修改body的背景颜色

Array内置对象及方法

  • 从数组的末尾添加
    arr.push(‘a’)
  • 末尾删除
    arr.pop()
  • 从前面插入
    arr.unshiift(‘b’)
  • 从前面删除
    arr.shift()
  • 从中间插入
    arr.splice(从哪里插入,0,数据)
  • 从数组的中间删除数据
    arr.splice(从哪里开始删除,删除多少个)
  • 从数组的中间替换数据
    arr.splice(从哪里开始,总共替换几个,替换的数据)

总结: arr.splice(从哪里开始,操作多少个,新的数据)
添加:操作0个
修改:操作修改个数(替换掉)
删除:没有新的数据
数组的方法:更多可以参考mdn

arr.forEach(function(item,index){})
arr.sort(function(a,b){
return a-b;
})

String内置对象

split 方法使用指定的分割字符串将一个String对象分割成子字符串数组
常用: String —array str.split(’,’)
arrary - string arr.join(’,’)
str.indexOf(‘a’) // 返回第一个a 出现的索引位置,没有则返回 -1
slice 用来提取指定位置的字符串

var str = '12345'
var newStr = str.slice(1)
console.log(newStr) // '2345'
```
暂时基础完毕,后续再补充
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值