JavaScript学习笔记

JavaSrcipt快速引入:

1.内部标签:

<script>alert('hello');</script>

2.外部引入:

<!--外部引入-->
    <script src="js/qj.js"></script>

测试代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <!--外部引入-->
    <script src="js/qj.js"></script>
    <!--<script>alert('hello');</script>-->
</head>
<body>

</body>
</html>

===是绝对等于,符号两边必须类型,数值完全一致。

==是等于,类型不一样,数值相同则为真。

NaN与任何数包括它本身都不相等。

尽量避免使用浮点数进行计算,存在精度问题。

浮点数问题:

console.log(Math.abs(1/3-(1-2/3))<0.0000001)

对象使用大括号{},数组使用中括号[]

var arr=[1,2,3,'hello']
new array(1,2,3)

对象每个属性使用逗号隔开,最后一个属性用加逗号。

var person={
            name:'tianyi',
            age:18,
            tabs:[1,2,3]
        }
'use strict';
        let i=1;

use strict是严格检查模式一般写在第一行,let是定义局部变量。var是定义全部变量一般不建议使用。IDEA需要设置支持es6.

数据类型

字符串:1.字符串可用单引号或者双引号

2.注意转义字符

Unicode字符集和AscII字符集都可

3.多行字符串编写

var msg=`hello
        red
        orange
        nice`

4.模版字符串

let name="tianyi";
        let msg=`nihao,${name}`
        console.log(msg)

5.字符串长度

console.log(student.length)

6.字符串具有不可变性。

7.大小写转换

//这里是方法不是属性
console.log(student.toUpperCase())
console.log(student.toLowerCase())

8.console.log(student.indexOf(‘s’))字符串中字符第一次出现的下标。

9.console.log(student.substring(1,3))前包后不包。

数组:

1.定义

var arr=[1,2,3,4,5,6]

2.长度

arr.length

3.数组是可变的

给arr.length赋值,数组长度就会发生变化。赋值过小,会造成元素丢失。可以通过下标取值和赋值。

4.arr.indexOf(6)通过元素获得下标索引。

5.slice截取数组的一部分,返回一个新的数组。前面不包括,后面包括。

arr.slice(1,5)

6.push压入,pop弹出,只对数组尾部进行

arr.push(9,10)
arr.pop(10)

7.unshift数组头部压入,可以压入多个。shift,头部弹出,只能弹出一个。

arr.unshift('a','b')
arr.shift('a')

8.sort排序

arr.sort()

9.元素反转reverse()

arr.reverse()

10.拼接concat

arr.concat("A","B","C")

注:拼接不改变原来的数组,只是返回一个新数组。

11.join打印拼接数组

['c', 'b', 9, 8, 7, 6, 5, 4, 3, 2, 10, 1]
arr.join('-')
'c-b-9-8-7-6-5-4-3-2-10-1'

12.多维数组

arr=[[1,2],[3,4],["5","6"]]
(3) [Array(2), Array(2), Array(2)]
arr[1][1]
4

对象:属性使用键值对来表示,属性之间使用逗号隔开,最后一个属性不用书写逗号。JavaScript中所有的键都是字符串,值是任意的。

var student={
            name:"tianyi",
            age:18,
            score:88
        } 

1.对象赋值:

student.name="tianming"
'tianming'
student.name
'tianming'

2.使用一个对象不存在的属性,不会报错

3.可以动态删减对象的属性。使用delete 去删除

delete student.name
true

4.动态添加属性

{
    "age": 18,
    "score": 88,
    "sex": "nan"
}

5.判断一个属性是否是当前对象的

"age" in student 
true

6.判断属性是否是当前对象独有

student.hasOwnProperty("age")
true

流程控制:

if…else…

let age=3;
        if(age>2){
            alert("hhh")
        }else{
            alert("kkk")
        }

while循环,避免死循环。

 while(age<100){
            age+=1;
            console.log(age)
        }

for循环

for(let i=0;i<100;i++){
           console.log(i)
       }

for each循环

var arr=[1,2,3,4,5,6,78,]
        arr.forEach(function (value) {
            console.log(value)
        })

for…in

var arr=[1,2,3,4,5,6,78,]
        for(var num in arr){
            console.log(arr[num])
        }

Map和Set

 var map=new Map([["tom",100],["jack",98]])
        var name=map.get("tom");
        console.log(name)
        map.set("tony",52);//添加
        map.delete("jack");//删除元素
var set=new Set([1,1,3])
        set.add(2);
        set.delete(2);
        console.log(set.has(3));

迭代器Iterator:

遍历数组

 var arr=[1,2,3]
        for (let x of arr){
            console.log(x)
        }
//for...of遍历数组for...in输入数组下标

遍历Map:

 var map=new Map([["jack",99],["tom",88],["jerry",66]])
        for (let x of map) {
            console.log(x)
        }

遍历Set:

var set=new Set([4,26,39])
        for (let x of set) {
            console.log(x)
        }

函数

1.定义函数:

一旦执行到return,函数结束。没有执行到return,函数执行结束会返回undefined。

方式一:

function abs(x) {
         if (x>=0) {
             return x;
         }else{
             return -x;
         }

     }

方式二:

 var abs=function (x) {
         if (x>=0) {
             return x;
         }else{
             return -x;
         }

     }

function{…}是匿名内部类可以赋值给abs,通过调用abs来达到调用函数的目的。

不存在参数如何规避:

var abs=function (x) {
         //手动抛出异常
         if (typeof x!=="number") {
             throw "not a number!"
         }
         if (x>=0) {
             return x;
         }else{
             return -x;
         }

     }

存在多个参数如何解决:使用arguments存储多余数据

var abs=function (x) {
         //手动抛出异常
         if (typeof x!=="number") {
             throw "not a number!"
         }
         for (let s=0;s<arguments.length;s++) {
             console.log(arguments[s])
         }
         if (x>=0) {
             return x;
         }else{
             return -x;
         }

     }

rest:可以对参数以外的数进行操作

 function ai(a,b,...rest) {
        console.log("a=>"+a)
        console.log("b=>"+b)
            console.log(rest)
        }

作用域:函数体内声明的变量,函数体外不可用(非用不可,可以使用闭包)。var定义的变量是有作用域的。

如果两个函数使用了相同的变量名,只要在函数体内,就不会产生冲突。

function ai() {
        var x=1;
        x+=1;
        return x;
    }
    function ai1() {
        var x="a";
        x+=1;
        return x;
    }

内部函数可以使用外部变量,外部函数不能使用内部变量,不然会报错。

内外部函数变量重名,函数会由内而外进行查找,查找到同名变量,内部变量会屏蔽外部变量。

//x is not defined
function ai() {
        var x=1+y;
      console.log(x)
        var y="y";
    }

JS执行引擎,会提升y的声明,不会提升y的赋值。

注:所有变量声明定义,放在代码头部,方便维护。

全局函数:

 'use strict'
        var x=1;
    function f() {
        console.log(x)
    }
    f();
    console.log(x)

全局对象:Window所有的全部变量与之相绑定

var x=1;
        alert(x)
        alert(window.x)

规范:由于全局变量绑定在Window上,不同Js文件使用相同的全局变量,会引发从冲突。解决方法:

//定义唯一全部变量
      var TianYi={}
      //让其他全部变量和函数与之相绑定
      TianYi.name="tianyue";
    TianYi.add=function (a,b) {
        return a+b;
    }

局部作用域let:

for (let i = 0; i <100 ; i++) {
          console.log(i)
        }
        console.log(i+1)
        //Uncaught ReferenceError: i is not defined

常量const:

const PI=3.14;
    console.log(PI)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值