[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 文档对象模型 是由节点构成的树
document---html--head body
1 getxxx方法
document.getElementById('idName')
document.getElementsByClassName("className")
2 DOM 查询方法
pink从头开始课程
浏览器执行js
高级语言转换为二进制语言 一句一句执行 逐行解释执行 因此称为脚本语言
js基础 ecmaScript
js api dom和bom
行内 内嵌
js基础部分语法
变量
初始化: 需要声明后使用 设置默认值 否则undefined
命名: 可由大小写和数字 _和$组成,严格区分大小写,不能数字开头,驼峰命名
数据类型
根据右边变量值判断数据类型,弱类型语言
-
数字型
最大 最小 特殊值 无穷 非数字 非数字函数isNaN
-
字符串 string
写法: 字符串推荐单引号 和html标签相同 可以双引号单引号嵌套
长度:string.length
拼接:'a'+'b'
-
Boolean
true=1
false=0
-
undefined 未赋值的变量
-
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
js对象
1 对象简介
创建对象的三种方法 1 直接定义对象 2new Object 3 构造函数: function构造函数(){} new 构造函数名
##/ 🔥new关键字
new 在执行时会做四件事:
- 在内存中创建一个新的空对象。
- 让 this 指向这个新的对象。
- 执行构造函数里面的代码,给这个新对象添加属性和方法
- 返回这个新对象(所以构造函数里面不需要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关键字创建的对象, 在存储时 变量中存储的仅仅是地址,
真正的对象实例存放在堆空间中
堆栈
栈: 操作系统自动分配释放 存放函数的参数值 局部变量等
堆; 由程序员分配释放,程序员不释放由垃圾回收机制回收
==简单类型函数传参 其实是吧变量在栈空间的值复制了一份给形参,不会影响==
==复杂类型函数传参 形参实参其实是保存到同一个堆地址,操纵同一个对象==