JavaScript基础知识整理篇

JS简介

JavaScript是世界上最流行的脚本语言,因为你在电脑、手机、平板上浏览的所有的网页,以及无数基于HTML5的手机App,交互逻辑都是由JavaScript驱动的。

简单地说,JavaScript是一种运行在浏览器中的解释型的编程语言、 非编译型语言、 解释性语言、 弱类型语言。

解释性语言:读取一行就运行一行

JavaScript的语法和Java语言类似,每个语句以;结束,语句块用{…}。但是,JavaScript并不强制要求在每个语句的结尾加;,浏览器中负责执行JavaScript代码的引擎会自动在每个语句的结尾补上;。

JS的用途
用户交互 表单的验证
后台服务器 node.js JavaEE python
JS的组成
ES:JS的核心 ECMAScript ECMA(定义了一套规范) 网景 微软JScript IE
DOM:Document Object Model 文档对象模型
BOM:Browser Object Model 浏览器对象模型
JS的书写位置(基于谷歌浏览器)
  • 行内式:写在标签的属性中(不推荐使用)
<button onclick="alert('点击了')">按钮</button>
  • 内嵌式:写在HTML文件中;需要写在script标签中 script标签可以有多个;通常放在body中;
<script>
    alert("hello");
    alert("你好");
    alert("hi");
</script>
  • 外链式:外部定义一个JS文件,通过script标签引入,src属性中写JS文件路径;
    在这里插入图片描述
<script src="../js/first.js"></script>

注意:外链式的script标签中,不能再写JS代码了

JS的各种弹窗
  • alert(内容)
alert('js');

在这里插入图片描述

  • confirm(内容) 确认框
confirm("确定删除?");

在这里插入图片描述

  • prompt(内容) 输入确定框
prompt("请输入年龄:");

在这里插入图片描述

  • console.log()在控制台打印 常用
console.log("hello,js");

在这里插入图片描述

  • console.dir() 以对象的形式打印出来
console.dir("");
  • document.write('hello world ') 向浏览器中写内容;能够识别标签
document.write("<h2>hello,js</h2>");

在这里插入图片描述

JS变量和常量
  • js中变量或者常量定义的时候是无需指定数据类型的 弱类型语言
    变量:表示变化的
    var 或 let (ES6支持) 用来定义一个变量;建议使用let
  • 常量 是不可变的;
    使用 const 定义
    1,常量的定义必须要给值
    2,赋值之后不能改动
<script>
    var a = 10;
    let b = 20;
    a="hello,js";
    console.log(a);

    const c = 10;
</script>
JS的数据类型

JS也分为基本数据类型和引用数据类型

基本数据类型(值类型):

  • string 字符串类型 (对单引号和双引号都支持)

  • number 数值类型(包含整型和浮点型)

  • boolean 布尔类型 true false

  • null 空类型 null

  • undefined 未定义的 undefined 尚未赋值的

    基本数据类型使用 typeof 查看

引用数据类型

  • Object

  • Function

  • Array

    引用数据类型使用 instanceof 查看
    注意点:在控制台中:蓝色字体是数字;黑色字体是字符串(谷歌浏览器)

<script>
    let a = "abc";
    console.log(typeof a);//string
    console.log(a);//abc
    let b = 9.8;
    console.log(typeof b);//number
    console.log(b);//9.8
    let c = true;
    console.log(typeof c);//boolean
    let d = null;
    console.log(typeof d);//object
    let e;
    console.log(e);//undefined

    console.log(f);//发生错误后,不在往后执行
    console.log(a);
</script>

结果:
在这里插入图片描述

JS数据类型之间的转换

1、数值转字符串

10 + ";(常用)
toString();

let a = 10;
    console.log(a);
    console.log(a + "");
    console.log(a.toString());

在这里插入图片描述

2、字符串转数值
parseInt(b),parseFloat(b)
b-0
+b

let b = "10.2";
    console.log(b);
    console.log(parseInt(b));
    console.log(parseFloat(b));
    console.log(b - 0);
    console.log(+b);

在这里插入图片描述

3、其他数据类型转布尔类型

0,空字符串,null,undefined,NaN 转boolean时为 false;其他都会转为true

if(undefined){
        console.log("条件为true")
    }else {
        console.log("条件为false")
    }

在这里插入图片描述

NaN

NaN : Not a Number 不是一个数字

js 函数
isNaN()表示是 不是一个数字吗

  • true 表示不是数字
  • false 表示是一个数字
<script>
    let a = "aaa";
    console.log(isNaN(a));//true

    let b = "123";
    console.log(isNaN(b));//false

    let c = 123;
    console.log(isNaN(c));//false
</script>
JS运算符
  • 赋值运算符
    =
  • 算术运算符
    + - * / % += -= /= *= %= ++ --
  • 条件运算符 得到布尔类型的结果
    > < >= <= == != 不同的: === !==
  • 逻辑运算符
    & && | || ! 建议使用 && ||
  • 三目运算符
    条件?表达式1:表达式2

== 只比较值 ===即比较类型又比较值
!=只比较值 !==值和类型都要看

<script>
    let a = 10;
    console.log(a / 2);
    console.log(a % 3);
    a += 10;
    console.log(a);
    // == 只比较值  ===即比较类型又比较值  !=只看值 !==值和类型都要看

    if ('20' === 20) {
        console.log("条件为真")
    } else {
        console.log("条件为假")
    }
    if (a > 10 && 20 > 10) {
        console.log("条件为真")
    }

    let c = a > 10 ? "真" : "假";
    console.log(c);
</script>

结果:
在这里插入图片描述

JS流程控制

1、分支结构

if(){
}else if(){
}else{}

switch(){  比较的时候使用的是===
   case值:
        逻辑语句;
        break;
   case值:
        逻辑语句;
        break;
   default:
   		逻辑语句;
let a =10;
    if(a>20){
        console.log(true);
    }else if(a>10){
        console.log(false);
    }else {
        console.log('a')
    }

    let str = "10";
    switch (str){
        case 10:
            console.log("number==");
            break;
        case "10":
            console.log("string ===");
            break;
        default:
            console.log();
    }

结果:
在这里插入图片描述

2、循环结构

for
while
do.. while 至少执行一次
for (let i = 0; i < 10; i++) {
        console.log(i)
    }

    let b = 0;
    while (b < 10) {
        console.log(b);
        b++;
    }

    let count = 0;
    do {
        console.log(count);
        count++;
    } while (count < 10);
JS数组

JS中数组和Java中的数组是不同的:
JS中数组的长度可以改变,可以存放不同的数据类型,这点和Java中的集合很像。

JS数组的几种定义方式:

  • 直接赋值 let arr = []; 空数组 最常用
  • new Array(长度|数组元素);
  • 相关函数 Array.of(...items);
  • string转为数组,Array.from(str);
<script>
    let ar = [];//空数组
    //直接赋值
    let arr = [10, 20, "abc", true, null, undefined];
    arr[10] = 20;
    console.log(arr);
    //new Array 数组长度为10
    let arr2 = new Array(10);
    //new Array(数组元素)
    let arr3 = new Array(10, 20, 30);
    console.log(arr2);
    console.log(arr3);

    //Array.of(数组元素)
    let numbers = Array.of(10);
    console.log(numbers);

    //string 转数组
    let str = "hello";
    let strings = Array.from(str);
    console.log(strings);
</script>

结果:
在这里插入图片描述

JS数组的存和取值

数组的长度 有个属性length 数组长度
数组索引值从0开始,0到length-1
取值:
数组名[索引]
赋值
数组名[索引] = 值
分为2种情况 如果索引存在就是替换 不存在就是新增

<script>
//数组的存和取值
    let arr = [10,20,30,40,50];
    console.log(arr.length);
    console.log(arr[2]);
    arr[10] = 'abc';
    console.log(arr);
    console.log(arr[8]);
</script>

结果:
在这里插入图片描述

JS数组的遍历

有三种方式:

1、普通for循环
2、增强for循环
3、forEach 箭头函数

<script>
    //数组的遍历方式
    let arr = [10, 20, 30, 40, 50];
    //普通for
    for (let i = 0; i < arr.length; i++) {
        console.log(arr[i]);
    }

    //增强for of 输出值
    for (let a of arr) {
        console.log(a);
    }

    //增强for in 输出索引值
    for (let i in arr) {
        console.log(i);
    }

    //forEach
    arr.forEach((a, index) => {
        console.log(index + ":" + a);
    })
</script>

结果:
在这里插入图片描述

JS中数组的方法
  • push()表示追加,可以追加多个元素,会影响源数组
  • pop()删除数组最后一个元素,返回的是删除的元素;会影响源数组
  • unshift()从数组头部进行插入,可以添加多个;会影响源数组
  • shift()删除的是数组的第一个元素; 会影响源数组
  • slice(startIndex,endIndex) 数组的截取,返回新的数组 [),不会改动源数组
  • concat(newArray)数组的拼接 会返回拼接后的新的数组 不会改动源数组
  • reverse() 翻转数组,会影响源数组
  • arr.join(’-’) 把数组元素按照指定的连接符拼接为字符串;默认使用逗号连接
  • splice(index,number,newItem…) 根据index找到位置然后删除指定number个数组元素,然后把newItem插入进来
  • indexOf() 数组元素第一次出现的索引号
  • lastIndexOf()数组元素最后一次出现的索引号
  • findIndex() 找到符合要求的第一次索引号

代码演示:
1、push()表示追加,可以追加多个元素,会影响源数组

<script>
    let arr = [10, 20, 30, 40, 50]; 
    arr.push(60,70,'abc');
    console.log(arr);
</script>

在这里插入图片描述
2、pop()删除数组最后一个元素,返回的是删除的元素;会影响源数组

<script>
    let arr = [10, 20, 30, 40, 50]; 
	arr.pop();
    console.log(arr);
</script>

在这里插入图片描述
3、shift()删除的是数组的第一个元素; 会影响源数组

<script>
    let arr = [10, 20, 30, 40, 50]; 
	arr.shift();
    console.log(arr);
</script>

在这里插入图片描述
4、unshift()从数组头部进行插入,可以添加多个;会影响源数组

<script>
    let arr = [10, 20, 30, 40, 50]; 
	arr.unshift(1,2,3);
    console.log(arr)
</script>

在这里插入图片描述
5、slice(startIndex,endIndex) 数组的截取,返回新的数组 [),不会改动源数组

<script>
    let arr = [10, 20, 30, 40, 50]; 
	var numbers = arr.slice(0,3);
    console.log(numbers);
</script>

在这里插入图片描述
6、concat(newArray)数组的拼接 会返回拼接后的新的数组 不会改动源数组

<script>
    let arr = [10, 20, 30, 40, 50]; 
	var numbers = arr.concat(1,2,3);
    console.log(numbers);
</script>

在这里插入图片描述
7、reverse() 翻转数组,会影响源数组

<script>
    let arr = [10, 20, 30, 40, 50]; 
	console.log(arr.reverse());
</script>

在这里插入图片描述
8、arr.join(’-’) 把数组元素按照指定的连接符拼接为字符串;默认使用逗号连接

<script>
    let arr = [10, 20, 30, 40, 50]; 
	var s = arr.join('-');
    console.log(s);
</script>

在这里插入图片描述
9、splice(index,number,newItem…) 根据index找到位置然后删除指定number个数组元素,然后把newItem插入进来

<script>
    let arr = [10, 20, 30, 40, 50]; 
	arr.splice(1,2,6);
    console.log(arr);
</script>

在这里插入图片描述
9.1、splice(index,number,newItem…) 相当于替换

<script>
    let arr = [10, 20, 30, 40, 50]; 
	arr.splice(1,1,6);
    console.log(arr);
</script>

在这里插入图片描述
9.2、splice(index,number,newItem…) 指定位置进行插入

<script>
    let arr = [10, 20, 30, 40, 50]; 
	arr.splice(1,0,6);
    console.log(arr);
</script>

在这里插入图片描述
10、indexOf() 数组元素第一次出现的索引号、lastIndexOf()数组元素最后一次出现的索引号

let arr = [10, 20, 30, 40, 40, 40, 50];
    console.log(arr.indexOf(40));//3
    console.log(arr.lastIndexOf(40));//5

11、findIndex() 找到符合要求的第一个索引号

<script>
    let arr = [10, 20, 30, 40, 50]; 
	console.log(arr.findIndex(a => {
        if (a > 20) {
            return true;
        }
    }));
</script>

在这里插入图片描述

JS函数定义

js的函数就是Java的方法,定义函数时形参只写名字 没有数据类型;有return就是有返回值 没有return就是没有返回值

js的函数定义分为2种
    普通命名函数
        function 函数名(){
            逻辑代码;
        }
    变量的方式
        let me = function(){
            逻辑代码;
        }

函数调用的方式都是一样的;函数名(实参);

匿名函数,立即执行的函数

代码演示:

<script>
    function add() {
        console.log("function invoked")
        console.log("function invoked")
    }
    add();

    let add2 = function () {
        console.log("add2 invoked")
    }
    add2();

    function add3(a ,b) {
        let c = a+b;
        return c;
    }

    let d = add3(10,20);
    console.log(d);

    (function f() {
        console.log("立即执行")
    })();
</script>

结果:
在这里插入图片描述

关于var定义变量可能存在的问题

1,JS预解析问题:js会把变量(var 修饰的 )的声明部分 和 函数的命名部分,提到当前作用域之前正常逻辑来写 变量先声明在赋值再使用 function先声明在使用

2,var修饰的变量 没有局部作用域的限制 ;在函数中使用var修饰时可以限制作用域

ES6推荐使用let定义变量

JS对象

JS对象中包括:
属性
方法
对象是引用数据类型

属性的取值 stu.name stu[‘age’]
对属性进行赋值,当属性名存在就是替换属性值,如果不存在就是新增属性
stu.age = 88;
stu[‘age’] = 16;
删除对象的属性 delete stu.name;

对象的成员与成员之间用逗号隔开

<script>
    let obj = {};//空对象
    let obj1 = new Object(); //obj 和 obj1等价

    let stu = {
        name: 'tom',
        age: 19,
        study: function () {
            console.log("学生在学习");
        },
        //方法的简写
        study1(){
            console.log("学生在学习。。。");
        }
    };
    //取属性值的两种写法
    console.log(stu.name);
    console.log(stu['name']);

    console.log(stu);
    stu.study1();
    console.log(stu instanceof Object);//true
    stu.name='jack';
    stu.gender='f';
    //删除对象属性
    delete stu.gender;
    console.log(stu);
</script>

效果:
在这里插入图片描述

JS对象的遍历

1,for循环对象成员的遍历

2,Object.keys(对象) 返回keys的数组

对象中存在对象属性

<script>
    let stu = {
        name:'tom',
        age:18,
        study(){
            console.log("学生的学习");
        },
        computer:{
            cpu:'AMD',
            display:'红米1A'
        }
    };

    // 1, for循环对象成员的遍历 取处对象的成员
    for(let key in stu){
        console.log(key);
    }

    // 2,Object.keys(对象) 返回keys的数组
   let strings =  Object.keys(stu);
    console.log(strings);

    //对象中有对象的取出
    console.log(stu.computer.cpu);
    console.log(stu['computer']['cpu']);
</script>

效果:
在这里插入图片描述

JS的内置对象

内置对象 表示js当中本身就存在的对象 不需要你new 不需要你创建

Math
	Math.PI
	Math.pow()
	Math.ceil() 向上取整(最小)
	Math.floor() 向下取最大
	Math.round()
	Math.random() 0-1之间的随机值

String 对象和Java方法大都一样
	length属性 得到字符串的长度
	charAt()
	trim() 去除前后空格
	indexOf() 首次出现的索引值
	lastIndexOf() 最后出现的索引值
	split() 按指定的字符进行切分
	subString(start,end) 截取字串,包含start索引对应的字符但是不包含end对应的字符
	subStr(start,length) 截取字串,从start索引开始截取length长度的字串
	startWith() 前缀的判断
	endWith() 后缀的判断

代码演示:

<script>
    console.log(Math.abs(-10));//10
    console.log(Math.PI);//3.141592653589793
    console.log(Math.pow(10,3));//1000
    console.log(Math.ceil(3.6));//4
    console.log(Math.floor(3.6));//3
    console.log(Math.round(3.2));//3


    for (let i = 0; i <10 ; i++) {
        console.log(Math.random());
    }

    let str = 'javasm';
    console.log(str.length);//6
    console.log(str.charAt(2));//v
    console.log(str.trim());//去除前后空格
    console.log(str.indexOf('a'));//1
    console.log(str.lastIndexOf('a'));//3
    var strings = str.split('a');
    console.log(strings);//j , v, sm
    console.log(str.substring(0,4));//java
    console.log(str.substr(1,3));//ava
    console.log(str.startsWith('ja'));//true
    console.log(str.endsWith('sm'));//true
    console.log(str.toUpperCase());//JAVASM
    console.log(str.toLowerCase());//javasm
</script>
JS中的日期
日期对象 Date
    常用方法
        getFullYear()
        getMonth()
        getDate()
        getHours()
        getMinutes()
        getDay()
   格式化
        toLocaleDateString()
        toISOString()
        toDateString()

代码演示

<script>

    let date = new Date();
    console.log(date);//Tue Jan 26 2021 19:50:36 GMT+0800 (中国标准时间)
    console.log(date.getFullYear());//2021
    console.log(date.getMonth() + 1);//1
    console.log(date.getDate());//26
    console.log(date.getHours());//19
    console.log(date.getMinutes());//50
    console.log(date.getSeconds());//36
    console.log(date.getDay());//2


    console.log(date.toLocaleDateString());//2021/1/26
    console.log(date.toLocaleTimeString());//下午7:50:36
    console.log(date.toLocaleString());//2021/1/26 下午7:50:36
    console.log(date.toISOString());//2021-01-26T11:50:36.226Z
    console.log(date.toDateString());//Tue Jan 26 2021

</script>

getDate()返回的是一个月的某一天(几号),getDay()是返回一周的某一天(周几)

JS作用域问题
  • 全局变量
    1、不在任何局部作用域中的声明的变量
    2、一个变量没有任何修饰符,也是一个全局变量
  • 局部变量
    在局部作用域中声明
<script>
    //全局变量
    let a = 10;

    if(true){
        //局部变量
        let c = 100;
    }

    function add() {
        //局部变量
        let b = 20;
        console.log(a);
    }
    add();
    console.log(c);
    console.log(b);
</script>

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值