# javascript学习笔记
## js基础语法部分
1.js包括ECMAScript(js语言基础)
Web APIs(包括DOM操作文档和BOM操作浏览器)
2.alert('') 警告
document.write('') 用js直接在页面上显示内容
console.log('') 在控制台输出的内容,供调试使用 ,简写log就出来了
prompt('') 输入
3.script注释
单行注释 Ctrl+/
多行注释 Shift+Alt+a
4.声明变量let age ->赋值 age=18 一般let age=18
5.1.prompt输入信息
2.用let保存信息
3.document.write输出信息
6.变量:let
常量:const 定义一个值之后就不能再赋值了,声明时必须赋值
7.变量命名规范:字母,数字,下划线_,$,且数字不能开头
严格区分大小写
驼峰命名userName
8.profitonal: = 等号两边有空格
, 逗号后边有空格
9.数据类型:基本数据类型:number数字型,与+-* / % 等算数运算符一起使用 出现NAN问题即not a number,意思是不是一个数字
string字符串型,用双引号"",单引号'',反引号``,但通常使用单引号'';+:字符串拼接,数字相加,字符相连
模板字符串:`我今年${age}岁了`
使用prompt和表单取出来的数是字符串型
Boolean布尔型,true,false
undefined未定义型,只声明,未赋值,let name undefine+1 = NAN
null空类型,赋值了,内容为空:let obj = null null+1 = 1,通常刚开始将对象设为null
引用数据类型:object对象,function函数,array数组
检测数据类型:typeof name
类型转换:隐式转换:+将数据转为字符(字符+数字 = 字符) ,+'123' 结果为数字型的123,这个用途很重要
- * / 将数据转为数字型
显式转换:1.Number('123') 将字符型转为数字型
Number(prompt('请输入您的年龄')) 将字符型转为数字型
2.parseInt('12.34px') 结果为12, 只能检测到数字
3.parseFloat('12.34px') 结果为12.34
10.=赋值
==值
===值和类型 用===!!!==有很多情况出现错误
!=值不等
!==值和类型有一个不等
NAN===NAN —> false NAN不等于任何,甚至它自己
11. 小数运算,不直接写0.1+0.2,因为有精度问题,结果是0.3000000000000004
应该 0.1*10 + 0.2*10 ->3 然后3/10=0.3
12.逻辑运算符:与&& 或|| 非(取反)!
13.运算符优先级:()
++,--,!
* / %
+ -
> < >= <=
== != === !==
先&& 后|| 结果只能为false和true
=
,
14. 顺序结构
分支结构:
1.if语句:1.if(条件){ //除了0,其余数字都为真;除了''(空字符串),其余字符都为真
执行 //范围通常用if
}
2.if(){
}else{
}
3.if(){
}else if(){
}else if(){
}else{
}
2.三元运算符:条件 ? 符合执行 : 不符合执行
3.switch语句: //值确定用switch
switch(数据){ //数据===值,执行代码
case 值1:
代码1
break
case 值2:
代码2
break
default:
代码n
berak
}
循环结构:
1.while循环
起始值
while (终止条件) {
循环代码
变化量
}
三要素:起始值,终止条件,变化量
循环的退出:break:直接到/script,直接退出整个for或while循环(一般用于结果已找到,不用执行后续操作)
continue:直接到i++,结束本次循环,继续下次循环(一般用于跳过某一项)
无限循环:while(true){}
2.for循环
for(起始值;终止条件;变化量){
循环体
}
最大价值:遍历数组
无限循环:for(;;)
while和for的选择:明确循环次数用for
不明确循环次数用while
15.计时器上小于10的数补0 :00:02:18
num = num < 10 ? 0 + num : num
16.arr1.push(arr[i]) //将arr里的树放到arr1中
17.数组中:查 arr[i]
改 arr[i]=2
增 arr.push(值) 往末尾加,一次能加多个
arr.unshift(值) 从头加,一次能加多个
删 arr.pop(空的) 删除最后一个元素,一次删一个
arr.shift(空的) 删除第一个元素,一次删一个
!!!arr.splice(起始位置,删除几个) 若不写删除个数,直接从规定的起始位置删到最后
18.排序 arr.sort() 默认从小到大排
arr.sort( //升序
function(a,b){
return a - b
}
)
arr.sort( //降序
function(a,b){
return a - b
}
)
19.函数的封装
函数的命名:驼峰,前缀应为动词,
动词:can 是否可执行某操作
has 有某值
is 是否为某值
get 获取值
set 设置值
load 加载数据
1.没有参数
声明: function 函数名(){
}
调用: 函数名()
2.含参数
一个参数:
声明: function 函数名(end){
return ...
}
调用: let re = 函数名(end的值)
两个参数:
声明: function 函数名(start,end){ ---形参
return ...
}
调用: let re = 函数名(start的值,end的值) ---实参
若实参不给值,那么默认是undefined,undefined+undefined=NAN
所以给为了防程序出现错误,形参一个默认值,当没有实参时,用默认值
function 函数名( x=0,y=0){
return
}
函数名(不给值)
return 1.将函数内部的结果交给外部使用
2.会立即结束当前函数,后面代码不会执行,所以return后面的数据不要换行写
3.函数可以没有return,结果为undefined
4.如果想返回多个数,就用数组装下,return [max,min]
20. 断点时:F10(眼睛箭头)不能看函数内部
F11(向下箭头)能看函数内部
21. 函数名相同时,后面会覆盖前面的
22. 实参多:多出来的实参不参与函数,忽略
形参多:多出来的形参为undefined
23. 具名函数:function fn(){
}
fn()
匿名函数:function() {
}
使用方式:1.函数表达式 将匿名函数赋值给一个变量,通过变量调用
let fn = function(x,y){ //除了声明这里与具名函数不一样,写法其余都一样
return x + y 用法的不同:具名函数的调用在任何位置包括声明前和声明后都可以
} 但是匿名函数只能在声明后使用,因为let
fn(1,2)
2.立即执行函数 //为了保护数据,防止被污染
(1)第一种写法
(function(){
let num = 1
})(); //必须要有分号,因为没有相当于这个函数没结束,会报错
(function(x,y){ //这里的x,y是形参
let num = 2
})(1,2) //这里的1,2是实参
(2)第二种写法
(function(形参){
}(实参));
24.一次性改变很多相同变量的名字:双击选中->Ctrl+D+D,加几个D选中几个变量
25.逻辑中断:a&&b 当a=0时,直接不执行b ;当a=1,执行b
a||b 当a=1时,直接不执行b ;当a=
console.log(11 || 22); //11
console.log(0 || 22); //22
console.log(11 && 22); //22
console.log(0 && 22); //0
所以函数默认值通常这样写 x = x || 0 和 y = y || 0
如:function fn(x,y){
x = x || 0 //x没有实参时,传入undefined,undefined || 0 = 0
y = y || 0
console.log(x + y)
}
fn()
26. Boolean() 内容为'',0,undefined,null,NAN,false,转换为布尔值为false,其余都为true
27. null和undefined的区别:null数字化为0,undefined数字化为NAN
null + 3 = 3 undefined + 3 = NAN
null ==undefined -> true null === undefined ->false
28.数组:有序的数据集合
对象:无序的数据集合
29. 对象:let obj = {
属性名:属性值
方法名:函数
'goods-name':手机
}
对象有属性和方法
属性:查:obj.uname 或者 obj['goods-name'] (属性名中带有字符串的必须这样写,没有单引号的也可以这样写)
改:obj.uname = 'lbj'
增:obj.gender = '女'
删:delete obj.uname
方法: method : function(){
}
obj.method() //调用
遍历对象:for(let k in obj){
console.log(k) //属性名
console.log(obj[k]) //属性值
}
30.内置对象:
Math对象包含的方法:Math.random():0-1之间的随机数 [0-1)
Math.PI:=π~3.1415926
Math.ceil(x):向上取整
Math.floor(x):向下取整
Math.round(x):四舍五入
Math.max(....):最大数
Math.min(....):最小数
Math.pow(x,y):幂运算
Math.abs(x):绝对值
Math.sqrt(16):平方根
[0,1) Math.random()
[0,1] Math.floor(Math.random()*2)
[5,10]Math.floor(Math.random() * 6) + 5
[N,M] Math.floor(Math.random() * (M-N+1)) + N
封装为一个函数:
function getRandom(N,M) {
return Math.floor(Math.random() * (M-N+1)) + N
}
getRandom(1,10)
随机抽取数组中的元素:
Math.floor(Math.random()*arr.length)
31.null的类型是空对象,typeof num = object
所以当对象还没有值的时候,可以先这样 let obj = null
32.简单数据类型(值数据类型) :值直接放入栈中
复杂数据类型(引用数据类型:object,function,array,date等) :值放入堆中,堆的地址放入栈中
--------------------------------------------------------------初次记录,欢迎提建议,感谢!