JS+小知识点

63 阅读6分钟

[toc]

题: 三个等于号

www.w3school.com.cn/tiy/t.asp?f…

www.w3school.com.cn/tiy/t.asp?f… 不位于也生效

null和undefined

null是给开发者用的,代表未经赋值的内容

undefined是js用的

浏览器中的js

DOM document Object Model 文档对象模型 是由节点构成的树

DOM HTML 树

document---html--head body

1 getxxx方法

document.getElementById('idName')
document.getElementsByClassName("className")

2 DOM 查询方法

pink从头开始课程

浏览器执行js

高级语言转换为二进制语言 一句一句执行 逐行解释执行 因此称为脚本语言

js基础 ecmaScript

js api dom和bom

image-20220831140431387

行内 内嵌

js基础部分语法

变量

初始化: 需要声明后使用 设置默认值 否则undefined

命名: 可由大小写和数字 _和$组成,严格区分大小写,不能数字开头,驼峰命名

数据类型

根据右边变量值判断数据类型,弱类型语言

  1. 数字型

    最大 最小 特殊值 无穷 非数字 非数字函数isNaN

  2. 字符串 string

写法: 字符串推荐单引号 和html标签相同 可以双引号单引号嵌套

长度:string.length

拼接:'a'+'b'

  1. Boolean

    true=1

    false=0

  2. undefined 未赋值的变量

  3. null

    a为null

三元表达式

表达式1 ? 表达式2 : 表达式3

如果表达式1为true,则返回表达式2的值,如果表达式1为false,则返回表达式3的值

循环

for

   let row=prompt('请输入行数')
        let col=prompt('请输入列数')
        let star='';
        for(let j=0;j<row;j++){
            for(let i=0;i<col;i++){
                star+='⭐';
            }
            star+='\n';
            console.log('打印星星'+j+'\n',star)
        }

while 循环 没有次数

do while 做某事 直到xx发生

区别: do-while至少能执行1次循环体,但是while可能一次都不执行

continue :continue 关键字用于立即跳出本次循环,继续下一次循环

break: 跳出循环

var 函数作用域 声明全局变量

let拥有块级作用域,一个{}就是一个作用域,也就是let声明块级变量,即局部变量;

const用来声明常量,一旦声明,其值就不可以更改,而且必须初始化

let不能在定义之前访问该变量,但是var可以。

重复声明同一个变量时,表现不同 var可以,let报错重复

例子:

// 会报错 let是块级作用域 下面result未定义
// 当改为var 不会报错
do{
            let result=prompt('请验证是否为真人');
        }while(result!='是');

continue: 跳出当次for循环,比如for i=3 跳出 但是会执行i=4

break: 跳出整个for循环 for循环不执行了

数组

1 == 增加数组中元素

① 修改length; arr.length=7

②修改索引; arr[6]='aaa' for循环中 可以定义变量自增索引号

2 删除数组中的元素

定义新数组 ,给出筛选条件{ newArr[i]=arr[i] }

3 数组翻转

定义新数组 从后往前循环

4 数组排序

冒泡排序

	 let arr=[9,2,345,6547,85]
        for(let i=0;i<arr.length;i++){
            for(let j=0;j<arr.length;j++){
                console.log(arr[j+1])
                console.log(arr[j])
                if(arr[j]>arr[j+1]){
                    var temp=arr[j];
                    arr[j]=arr[j+1];
                    arr[j+1]=temp;
                }
            }
        }

命名规范

函数用动词 变量用名词

js函数与作用域

函数return

return后面的不会被执行

终止函数的执行并返回函数的值。

加空格

for(let i = 1;i < n; i++){
            
}

arguments

当我们不确定有多少个参数传递的时候,可以用 arguments 来获取。在 JavaScript 中,arguments 实际上它是当前函数的一个内置对象。所有函数都内置了一个 arguments 对象,arguments 对象中存储了传递的所有实参。

arguments存放的是传递过来的实参

arguments展示形式是一个伪数组,因此可以进行遍历。伪数组具有以下特点

①:具有 length 属性

②:按索引方式储存数据

③:不具有数组的 push , pop 等方法

  function fn(){
            console.log('arguments',arguments)
            console.log('arguments.length',arguments.length);
            console.log('arguments[2]',arguments[2]);
        }
        fn(1,2,3)

js没有块级作用域{} var是全局变量, 只有函数作用域 es6之后新增let

作用域链:重复定义就近原则

预解析

变量声明提前 函数声明提前,但是赋值不会提前 ,所以如果打印下方定义的变量,会显示undefined

img

js对象

1 对象简介

创建对象的三种方法 1 直接定义对象 2new Object 3 构造函数: function构造函数(){} new 构造函数名

##/ 🔥new关键字

new 在执行时会做四件事:

  1. 在内存中创建一个新的空对象。
  2. 让 this 指向这个新的对象。
  3. 执行构造函数里面的代码,给这个新对象添加属性和方法
  4. 返回这个新对象(所以构造函数里面不需要return)

遍历对象 for in

2 内置对象

内置对象之Math对象

​ 四舍五入各种取整 自定义对象; 随机数random()方法

内置对象之Date()日期对象

倒计时 没懂

内置对象之数组对象

创建数组 new Array or let arr=[]

数组检测 instance of Array;Array.isArray()

增删 ==unshift==都是在数组开头进行增/删,push pop是在数组末尾进行增/删

方法名说明返回值
push末尾添加一个或多个元素注意修改原数组 并返回新的长度
pop删除数组最后一个元素返回它删除的元素的值
unshift向数组的开头添加一个或更多元素,注意修改原数组并返回新的长度
shift()删除数组的第一个元素,数组长度减1,无参数,修改原数组并返回第一个元素

排序 reverse sort

索引 indexOf() lastIndexOf()

数组去重 遍历旧数组 拿着旧数组比较新数组 ,newArr.==indexOf(数组)===-1 说明没有这个元素,就push进去

indexOf() 方法可返回某个指定的字符串值在字符串中首次出现的位置。

如果没有找到匹配的字符串则返回 -1。

数组转字符串 toString() ==join==('分隔符如& -')

slice截取 slice(begin,end)

==splice()== 删除 会影响原数组

内置对象之字符串对象

包装类?

==String Number Boolean==

方法:

replace('a','b')

split(',')

toUpperCase()

toLowerCase()

==charAt(index) 返回指定位置字符==

6 简单类型 复杂类型(引用类型)

==(栈)==简单类型: string number boolean undefined null

==(堆)==复杂类型: 比如 Array,Object,Date

通过new关键字创建的对象, 在存储时 变量中存储的仅仅是地址,

真正的对象实例存放在堆空间中

堆栈

栈: 操作系统自动分配释放 存放函数的参数值 局部变量等

堆; 由程序员分配释放,程序员不释放由垃圾回收机制回收

==简单类型函数传参 其实是吧变量在栈空间的值复制了一份给形参,不会影响==

==复杂类型函数传参 形参实参其实是保存到同一个堆地址,操纵同一个对象==