About JS Basic knowledge

JS基础

JS初识

JavaScript 定义

JS 是世界上最流行的语言之一,是一种运行在客户端的脚本语言(Script 是脚本的意思)
脚本语言:由Js引擎(JS解释器) 逐行进行解释并执行 若某行报错,则停在该行

Js的作用

1.表单动态校验(JS产生的最初目的)
2.网页特效
3.服务端开发
4.App
5.etc

HTML CSS JS 关系

1.HTML / CSS :标记语言-----描述类语言

HTML 决定网页结构和内容
CSS 决定网页呈现给用户的模样

2.JS :脚本语言-----编程类语言

实现业务逻辑和页面控制(决定功能)

浏览器如何执行JS

在这里插入图片描述

JS的组成

在这里插入图片描述
(1)ECMAScript
在这里插入图片描述
JS 基础语法 由 ECMAScript规定
(2)DOM 文档对象模型
以document里的各个元素为对象
文档对象模型(Document Object Model ) 是W3C组织推荐的处理可拓展标记语言的标准接口
通过DOM提供的接口 可以对页面上的各种元素进行操作

(3)BOM 浏览器对象模型
以window(浏览器)为对象
BOM(Browser Object Model) 是指浏览器对象模型,它提供了独立于内容的,可以与浏览器进行互动的对象结构 。通过BOM可以操作浏览器窗口

1.JS书写位置

(1)行内式
可将JS写到元素内部
e.g.

<input	type ="button" value="click" οnclick="alert('Hello')/>

(2)内嵌式
在html标签页书写

<script>
alert("what's wrong?");
</script>

(3)外部JS
先在外面创建一个页面
XXX.js
然后在HTML页面中 引入该页面

<script src ="xxx.js">
</script>

2.输入输出

(1)输入框

prompt('please input here');
// 弹出框 弹出“please input here”

(2)输出(通过弹出框 展示给用户)

alert('the result is right');

(3)控制台输出(在console框中 展示给程序员)

console.log('u r a grammer');

3.变量

(1)变量的定义
变量:一个装东西的盒子
变量是用于存放数据的容器,我们通过变量名获取数据,甚至数据可以修改
本质:变量是程序在内存中申请的一块用来存放数据的空间
(2)变量的使用
先声明 再赋值

var uname ='levi'; //为uname 这个变量进行了初始化 即声明+赋值

var 为 关键字 用于声明js中的任意变量
uname 为变量名

//输出用户输入的值
var value = prompt('please input');
alert(value);

(3)变量语法拓展
变量值 可由顺序赋值而被覆盖
可以同时生变多个变量,但需要用英文逗号隔开
声明变量特殊情况
在这里插入图片描述
ps:不声明 直接赋值 该变量直接转换为全局变量
(4)变量命名规范
在这里插入图片描述
conclusion: 只能由 英文字母 数字 下划线 美元符号组成&& 不能是数字开头&&不能是关键字且要有意义&&多单词采用驼峰命名

4.数据类型

变量的数据类型 根据右边的 值来决定
(1) 数据类型分类
在这里插入图片描述
在这里插入图片描述

1.数字型 Number

(1)数字型进制
在这里插入图片描述
八进制 前面添加 0
16进制前面添加0x
输出都是对应的 十进制
(2)数字型范围
在这里插入图片描述
(3)数字型的三个特殊值
在这里插入图片描述
(4)isNaN()

用于判断一个变量是否为非数字的类型 返回true/false
在这里插入图片描述

2.字符串型String

(1)字符串 用单引号/双引号 嵌套

在这里插入图片描述
(2)字符串转义符
在这里插入图片描述
(3)字符串长度
利用字符串的length属性 求整个字符串长度
在这里插入图片描述
(4)字符串拼接
在这里插入图片描述
只要是 字符串和 任意一种类型进行‘+’运算 ,则这里的 ‘+’起的是 拼接作用

(若某字符串-其他类型 输出NaN)

3.布尔型Boolean

在这里插入图片描述
在这里插入图片描述

console.log(true+1); //2
console.log(false+1);//1
4.undefined&null

在声明一个变量之后未对其赋值 ,输出该变量得到undefined
给一个变量赋值为null 该变量返回为一个 空对象
在这里插入图片描述
在这里插入图片描述

5.检测数据类型

用typeof + 变量 来检测
e.g.
在这里插入图片描述
注释表示结果

5.数据类型转换

将一种数据类型的变量转换为另一种数据类型
以下三种: 转换为 字符串类型 数字型 布尔型
(1)转换为字符串类型
在这里插入图片描述

var num1 = 123;
var num2 = 0.01;
console.log(num1.toString());
console.log(String(num2));
console.log("+num2);

(2)转换为 数字型
以下介绍的 都是 将 字符串类型的 转化为数字型
在这里插入图片描述
建议 用最后两个 最简单 直接转换为对应数值型无论是 浮点型还是整数型
Number() / 隐式转换

var str1 ='12';
var  str2 = '12.34';
var num1 =parseInt(str1);
var num2 =parseFloat(str2);
var num11 = str1-0;
var num22 =Number(str2); //

(3)转换为布尔型
在这里插入图片描述

6.运算符

(1) 算数运算符
算数运算使用的符号,用于执行两个变量或值的算数运算
在这里插入图片描述
浮点精度问题:
在这里插入图片描述
因此 不要直接判断两个浮点数是否相等
(2)比较运算符
在这里插入图片描述

小结:在这里插入图片描述
(3)逻辑运算符
在这里插入图片描述
(4)逻辑中断
即:短路运算
短路运算原理:当有多个表达式(值)时,左边的表达式值可以确定结果时,就不再继续运算右边的表达式的值
逻辑与:
在这里插入图片描述
逻辑或:
在这里插入图片描述

我发现: 其实返回的值 就是决定这个式子答案的值
(5)赋值运算符
在这里插入图片描述
(6)运算符优先级
在这里插入图片描述

7.流程控制分支结构

(1)顺序

(2)if分支
和c一样 不做讲解
(3)三元表达式( 三元表达式 是一个表达式,有返回值的)
条件表达式? 表达式1:表达式2;
如果条件表达式为真 则返回 表达式1的值
e.g.

var result = 3>5?  'Yes':'No'

(4)switch 语句
实现多选一
记住这里的 default 一定要写 不然答案不对
在这里插入图片描述
Ps:
1.switch()里的表达式 我们经常写成变量
2.Switch()里的值和case里的值 匹配时 ,必须是全等(值和数据类型都一致)
3. 若第一个case中没有break,则不退出,直接继续执行下一个case

(5)循环
和c一样
不做讲解

8.数组

(1)创建数组
两种方式:
在这里插入图片描述
1.通过数组字面量

var arr = [];
arr = [1,2,'Yes','levi'];

2.通过 new Array() 创建数组

var arr1 = new Array(); //声明了数组
var arr2 = new Array(2);// 声明了 长度为2的数组
var arr3 = new Array (1,2,3,'pink');//对arr3 进行了初始化

(2) 访问数组元素
在这里插入图片描述
(3)遍历数组
使用循环

var arr = new Array (1,2,3,4,5)
for(var i = 0;i<arr.length;i++)
{
console.log(arr[i]);
}

(4)数组中新增元素
1.可以后期修改数组长度

var arr =new Array(1,2,3);
arr.length = 7;
//未声明的数组元素 输出为 undefined

在这里插入图片描述
2.可以通过修改数组索引来添加数组元素
在这里插入图片描述

9. 函数

函数就是封装里一段可以被重复执行调用的代码块
(1)函数的使用
分为 :声明函数 和 调用函数

Function 函数名(){
// 函数体
}
(2)调用函数

在这里插入图片描述

(3)带参的函数
在这里插入图片描述

参数的作用:在函数内部,某些值不能固定,我们可以通过参数在调用函数时传递不同的值进去

(4)函数形参和实参个数不匹配问题
在这里插入图片描述
(5)函数的返回值
格式:
在这里插入图片描述
Return 具有终止函数的功能
并且return只能返回一个值(最后一个值,如下图的num2)
在这里插入图片描述
若函数中无返回值,输出该函数得到的是undefined
在这里插入图片描述
(5)arguments的使用

function fn () {
console.log(arguments);//arguments 里面存储了所有传递过来的实参
}
fn(1,2,3);

arguments是一个伪数组
在这里插入图片描述
(6)函数的两种声明方式
1.利用函数关键字自定义函数(命名函数)

function fun () {
alert('HI');
}
fun();

2.函数表达式 (匿名函数)

var btn=document.querySelector('#btn');
var fun = function () {
btn.click = function () {
alert('time out');
var fn = function (num1,num2) {
sum = 0;
sum =num1+num2;
return sum;
}

Ps:(1)fun是变量名,不是函数名
(2)声明函数表达方式跟声明变量差不多,只不过变量里面存的是值,而函数表达式里存的是函数
(3)函数表达式也可以传递参数

10.作用域

Js 作用域:代码名字(变量)在某个作用范围内起作用和效果
1.作用域分类
(1)全局作用域
整个script标签 或 单独js文件内
Ps: 若在函数内部,没有声明,直接赋值的变量也属于全局变量
(2)局部作用域(函数作用域)
这个代码的名字只在函数内部起效果/作用
函数的形参也看作是局部变量
(3)全局变量和局部变量的区别
在这里插入图片描述
2.作用域链: 内部函数访问外部函数的变量,采取的是链式查找方式来决定取哪个值,这种结构我们称为作用域链------就近原则

11.Js预解析

1.js引擎运行js 分为两步:预解析 代码执行
(1)预解析:js引擎会把js里面所有的var 还有function 提升到当前作用域的最前面

(2)代码执行 :按照代码书写的顺序,从上往下执行

2.预解 析分为 变量预解析(变量提升) 和 函数预解析(函数提升)
(1)变量提升:就是把所有的变量声明提升到当前的作用域前面 只提升声明,不提升赋值操作

(2)函数提升:把所有的函数声明,提前到当前作用域的最前面(不调用函数)

12.对象

(1)对象定义
在这里插入图片描述
(2)创建对象

有以下三种方式 创建对象
: 利用字面量创建
利用 new Object()
利用 构造函数

1.利用字面量创建对象

var obj = {
uname: 'Levi',
age:18,
sing:function() {
alert('Havana');
}

2.利用new Object() 创建对象

var ldh = new Object();
ldh.name = 'liudehua';
ldh.age = 50;
ldh.sing = function() {
console.log('sing a song');
}

3.构造函数

function Star(name,age) {
this.name = name;
this.age = age;
this.sing = function () {

}
new ldh = new Star ('ldh',19);
for(var k in ldh)
{
console(k); //k得到的是 属性名
console(ldh[k]); //ldh[k]为属性值
}

(1)构造函数 首字母要大写
(2)构造函数不需要return,就可以返回结果 返回的是一个对象
(3)调用构造函数 必须使用new
(4)只要new Star() 调用函数就创建一个对象
我们的属性和方法前面必须添加this

在这里插入图片描述

13.内置对象

(1)Math对象
Math数学对象 不是一个构造函数 无需new 直接使用里面的属性和方法
在这里插入图片描述
注意:

console.log(Math.round(-1.1)); // -1 Math.round() 四舍五入
console.log(Math(-1.5)); //-1 注意 对于.5都是往大的取
console.log(Math.abs('-1'));//1 abs是取绝对值 这里还存在隐式转换 将字符串型 转换为数值型
console.log('Math.asb('pink'));// 输出NaN

(2)random() 随机数
在这里插入图片描述

console.log(Math.random());//然后就会输出一个随机数 (该数>=0 &&<1)

(3)日期对象使用
Date() 日期对象 是一个构造函数 必须使用new来调用日期对象

var time = new Date();
console.log(time);//会得到当前准确时间

在这里插入图片描述
在这里插入图片描述

var date = new Date();
console,log(date.getfullyear());
console.log(date.getMonth() + 1);//date.getMounth() 得到的是0-11月

若要得到 总时间毫秒数 从1970年 1月1日 到现在

console.log(date.valueOf());
console.log(date.getTime());
var timer = +new Date();//+new Date() 就是总的ms数
var timerr = Date.now();

(4)数组对象
1.创建数组的两种方式:

//前面有讲过,再说一次吧
//利用字面量
var arr1 = [];
arr1 = [1,2,3];
//利用new Array();
var arr2 = new Array(1,2,3);

2.检测是否为数组的两种方式:

var arr = [];
console.log(arr instanceOf Array);
console.log(Array.isArray(arr));

(输出true 则为数组/false则不是)

//emmm 这个arr instanceOf Array 好像行不通 等把所有博客补完 我再来纠正吧

3.添加数组元素
在数组末尾和前面添加元素有以下两种方法

var arr = new Array(1,2,3);
arr.push('lexi','levi'); //输出这个返回的是新数组的长度 这是在数组末尾添加
arr.unshift('Mark','richard'); //输出这个返回的是新数组的长度。这是在数组前面添加

在这里插入图片描述
在这里插入图片描述
4.删除数组元素
删除数组最后一个元素 和 第一个元素有以下方法

var arr =[1,2,3];
arr.pop();//返回的是 删除的那个元素
arr.shift();//返回的是 删除的那个元素

在这里插入图片描述
在这里插入图片描述
这里的push() 在数组末尾增加元素,括号里就是要增加的元素 ,因此括号里有参数 返回新数组长度
unshift()在数组前面增加元素,括号里就是要增加的元素 ,因此括号里有参数 返回新数组长度
pop() 只是删除 最后一个元素 括号里无参数 返回被删去的元素
shift()只是删除数组第一个元素 括号里无参数 返回被删去的元素

在这里插入图片描述

6.数组排序
(1)reverse()

arr..reverse(); //将数组翻转
console.log(arr);

直接调用函数reverse() 进行反转数组
(2)sort()
仅限于个位数 排序

arr.sort();

(3)对于不仅限对于个位数的排序
在这里插入图片描述
将a-b改为b-a则为 降序

7.数组索引方法
在这里插入图片描述
在这里插入图片描述

var arr =['pink','blue','yellow'];
console.log(arr.indexOf('blue'));//存在则返回索引号若不存在则返回-1;

8.将数组转换为字符串
在这里插入图片描述
join() 分割数组
若要用()中的符号分隔开数组 该符号需加’ ’

(5)字符串对象
(1)基本包装类型:就是把 简单数据类型 包装为 复杂数据类型
在这里插入图片描述
(2)字符串的不可变
指的是 里面的值不可变,虽然看上去可以改变内容,但其实是地址变了,内存中新开辟了一个内存空间
(3)查找字符位置
在这里插入图片描述
e.g.
在这里插入图片描述

通过字符求索引号

(4)根据位置返回字符
在这里插入图片描述

str.charAt()通过索引号求字符
str.charCodeAt()通过索引号求相应字符对应的Ascii码值

(5)字符串操作方法
1.拼接以及截取字符串
在这里插入图片描述

var str ='levi is such a great person';
str.concat('red');//=str+'red'
str.substr(5,3);//5表示 开始截取字符索引号 ,3表示截取长度
str.slice(1,3);//1表示开始截取位置(可以截取到),3表示结束截取位置(截取不到end)

2.替换字符串以及转换为数组
在这里插入图片描述

var str = 'leviii';
str,replace('i','m');//输出则为levmii 因为只会替换第一个i

在这里插入图片描述

14.13.简单数据类型与复杂数据类型

(1)数据类型内存分配
在这里插入图片描述
(2)堆和盏
在这里插入图片描述
在这里插入图片描述

BOM和DOM近期会补完的。。。都写在word文档里的 没有整理好

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

聪明的Levi

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值