1.javascript是运行在浏览器的编程语言(组成部分有ECMAScript,BOM,DOM).ECMAScript是确定js的语法规范,DOM是js动态操作网页内容,BOM是js动态操作浏览器窗口.

前端知识总结.xmind
2.js三种书写位置:
(1)行内:写在标签内部.
(2)内联:写在script标签里面,script标签放在上方.
(3)外联:写在js文件中,使用script标签的src属性引入.

3.js的两种注释方法:
(1)//单行注释(vscode快捷键 ctrl+/)
(2)/ / 多行注释(vscode快捷键 ctrl+alt+a)

4.输入与输出语句:
(1)弹出提示框 alert()
(2)页面输出 document.write()
(3)控制台输出 console.log()
(4)弹出输入框 prompt()
(5)弹出确认框 confirm()

5.数据类型
(1)number数值类型[一切数学中数字 作用:数学计算]
(2)string 字符串类型[单引号'' 双引号"" 反引号(模板字符串)`` 一切用引号抱起来的内容 用来展示文本]
(3)boolean布尔数据类型[true(真) false(假) 表示条件成立/不成立]
(3)undefined未定义[变量有声明,未赋值,默认值就是undefined]
(4)null[主动赋值,要存东西,但是不知道存什么]
6.检测数据类型
(1)typeof数据:得到一个字符串,告诉你是数据都是什么类型的

变量

1.变量的作用:在内存中存储数据
2.数据语法:
(1)声明变量:let变量名(在内存中开辟空间)
(2)赋值:变量名=值
(3)取值:变量名
变量注意点
(1)let变量不允许重复声明
(2)变量赋值的时候会先销毁,然后存入新值
(3)变量给变量赋值,先拷贝后赋值
(3)变量命名规则: 开头:字母 下划线_ $ 后面:字母 下划线_ $ 数字 不能使用关键字[取名最好是英文单词,多个单词驼峰命名:首字母小写,后面单词首字母大写]

运算符

1.运算符不能单独使用,需要与运算数据一起组成式子,称之为表达式
2.表达式一定会有运算结果,要么打印,要么存入变量
3.关系(比较)表达式结果一定是布尔类型,true:成立 false:不成立

逻辑运算符
作用:计算多个条件关系
&&:一假全假 全真为真
|| :一真全真 全假为假
!:取反 true变false false变true

数据类型转换
字符串类型转number

    1.1 转整数:  parseInt(数据)
    console.log(parseInt('123'));
    1.2 转小数:  parseFloat(数据)
    console.log(parseFloat('123.4'));

    2.非字符串类型转number
    console.log(Number(null)); //0
    console.log(Number(undefined)); //NaN
    console.log(Number(true)); //1
    console.log(Number(false)); //0

NaN特点: 不能参与任何运算。 结果一律是NaN

    console.log(NaN === NaN); //false

   隐式转换 : 当运算符两边的 ‘数据类型不一致’ 的时候,编译器会转成一致后运算
        (1)转换数字 : 算术运算符 + - * / %
        (2)转换字符串 : 连接符+  (+号两边只要有一边是字符串,此时+就是连接符)
        (3)转换布尔: 逻辑非 !    
   */
    //转数字
    console.log('10' - 1); //Number('10')-1=10-1=9
    console.log(1 + true); //2 1+Number(true)=1+1=2
    console.log(+'20'); //+Number('20')//20
    let num = '10'
    num++
    console.log(num); //11


    //转字符串
    console.log(1 + '1'); //String(1)+'1'='1'+'1'='11'
    //逻辑非
    console.log(!1); //!Boolean(1)=!true=false
    console.log(!null); //!Boolean(null)=true
    console.log(1 + 1 + '1'); //'21'
    console.log(1 + '1' + 1); //'111'
    console.log('1' + 1 + 1); //'111'

转换为Boolean布尔类型
1.false: 有7种数据会得到false

        '' 0 -0 NaN undefined null false

2.true: 除false 7种之外的一切数据

转换为字符串类型

  1. String(数据)

     console.log(String(10)); //'10'
     console.log(String(true)); //'true'
     console.log(String(undefined)); //'undefined'
     console.log(String(null)); //'null'
    
     2. 变量名.toString()
     a. 如果是undefined与null,这种方式会报错 
        b. 这种方式可以支持进制转换。 例如把 十进制转十六进制
     
     let num = 255
    
     console.log(num.toString(16)); //FF 转换为16进制   
    

数组

1.数组是一种复杂数据类型
2.可以在变量中存储多个数据
3.数组内存由三个部分组成[元素;数组中的数据,下标:元素的位置,长度:元素的数量]
4.数组名.push(元素):一个或多个元素,添加到数组末尾
5.数组名.unshift(元素):一个或多个元素,添加到数组开头
数组删除

    (1)数组名.pop() 删除数组 最后一个元素
    (2)数组名.shift() 删除数组第一个元素
    (3)数组名.splice(下标,数量)从指定下标开始 删除元素

函数

//函数和循环区别
// 1.本质区别:
// 函数是一种数据类型:存储代码
// 循环是一种语句:让一段代码执行多次
// 2.功能不同
// 函数:代码复用(一段代码需要在很多个地方执行一次)
// 循环:重复执行(一段代码在一个地方执行多次)



    0.函数语法  : 函数是一种用于存储代码块的复杂数据类型
        * 作用:解决代码复用问题
    
    1.声明函数 : 声明函数只是把代码存起来,不会执行函数体  
        function 函数名(){
            函数体代码: 需要存储的一段代码
        }

    2.调用函数 : 执行函数体代码
        函数名()

    3.函数参数 : 调用者 传递数据 函数
        3.1 传:调用者
            函数名(实际参数)
        3.2 收:函数
            function 函数名(形式参数){   //函数体代码 }
        3.3 函数传参本质: 实参给形参赋值的过程
            (1)函数传参是按照传入顺序一一赋值
            (2)函数每一次调用传参过程都是独立的,互不影响
            (3)函数 形参数量 和 实参数量 可以不一致的
        3.4 注意点:
        a.实参和形参数量可以不一致,但是按照顺序一一赋值
     
    每一个调用者,调用的过程都是独立的过程,互不影响.
     没有传参,实参为undefined

函数默认参数(逻辑短路)

 
    1.函数默认参数,我们自己在开发中使用不多。(了解后面很多js框架函数默认参数底层原理)
    2.函数默认参数 使用 逻辑运算符短路运算(逻辑中断)
        2.1 短路运算: 左边式子就可以决定结果,右边式子不执行
            && : 一假则假
            || : 一真则真
             ! : 取反(没有短路运算,因为只有一个式子)
        2.2 短路规则:
            && : 找假。  左边式子值可以转成false,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。
            || : 找真。 左边式子值可以转成true,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。 
    
    
//逻辑与:一假则假 
//&& : 找假。  左边式子值可以转成false,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。
let res = 1 && null
console.log(res) //null
//逻辑或:一真则真
// || : 找真。 左边式子值可以转成true,则无条件返回左边式子的值,右边不执行。 反之无条件返回右边式子的值。 
let res1 = 1 + 1 || null
console.log(res1) //2

console.log(1 && undefined && null) //undefined
console.log(1 || undefined || null) //1

//应用场景
function getSum(num1, num2) {
  num1 = num1 || 10
  num2 = num2 || 20
  let sum = num1 + num2
  console.log(sum);
}
getSum(10, 20) //20
getSum(1) //21

函数

0.函数语法 : 函数是一种用于存储代码块的复杂数据类型

        * 作用:解决代码复用问题
    
    1.声明函数 : 声明函数只是把代码存起来,不会执行函数体  
        function 函数名(){
            函数体代码: 需要存储的一段代码
        }

    2.调用函数 : 执行函数体代码
        函数名()

    3.函数参数 : 调用者 传递数据 函数
        3.1 传:调用者
            函数名(实际参数)
        3.2 收:函数
            function 函数名(形式参数){   //函数体代码 }
        3.3 函数传参本质: 实参给形参赋值的过程
            (1)函数传参是按照传入顺序一一赋值
            (2)函数每一次调用传参过程都是独立的,互不影响
            (3)函数 形参数量 和 实参数量 可以不一致的

    4.函数返回值 : 函数 传递数据 给调用者
        4.1 传 : 函数
            function 函数名(){ return 值 }
        4.2 收 :  调用者
            let 变量名 = 函数名()
        4.3 注意点
            (1)函数return关键字后面的代码不会执行的
                * 只要有return关键字,函数体立即结束执行。
            (2)如果函数没有return,则默认返回值是undefined
            (3) 如果函数有return, 但是return后面没有值, 此时默认值也是undefined

对象

    1.声明对象  
        let 对象名 = {
            属性名:属性值,
            属性名:属性值,
            方法名:function(){}
        }

    2.取值语法
        对象名.属性名

    3.细节: 对象中的属性值是什么数据类型, 取出来的时候就可以使用这个类型的所有语法
        如,对象的属性值是 数组, 则可以: 对象名.属性名[下标]
        如,对象的属性值是 函数, 则可以: 对象名.属性名()
    


let object = {
  name: '张三',
  age: 18,
  sex: '男',
  habby: ['吃饭', '打台球', '健身'],
  eat: function () {
    alert('今天吃的营养餐')
  },
  car: {
    name: '凯迪拉克',
    year: 5,
    ways: '8万公里'
  }
}


console.log(object)


//对象取值:对象名.对象值
console.log(object.name); //张三
console.log(object.name + 1); //'张三1'
console.log(object.age + 1); //19
console.log(object.habby[1]); //'打台球'
object.eat()
console.log(object.car.name); //'凯迪拉克'



    
    1.查询属性
        点语法      对象名.属性名
        []语法      obj['属性名']    obj[ 变量名 ] 
    2.修改属性
        对象名.属性名   = 值
        对象名['属性名'] = 值
    3.新增属性
        (1)如果已经存在的属性赋值,则是修改
        (2)如果不存在的属性赋值,则是新增
    4.删除对象属性
        delete 对象名.属性名
    
    let obj = {
        name: '班长',
        age: 38,
        sex: '男'
    }
    // (1)如果已经存在的属性赋值,则是修改
    obj.sex = '女'
    console.log(obj);
    // (2)如果不存在的属性赋值,则是新增
    obj.girlFrienf = '十月'
    console.log(obj)

    // delete 对象名.属性名

    delete obj.sex
    console.log(obj);

对象练习

    //需求:封装一个函数,返回一个随机颜色  rgb(255,255,255)
    //生成随机颜色
    // function getRandomColor() {
    //     let r = Math.floor(Math.random() * 256)
    //     let g = Math.floor(Math.random() * 256)
    //     let b = Math.floor(Math.random() * 256)
    //     return `rgb(${r},${g},${b})`
    // }
    // let res = getRandomColor()
    // console.log(res)
    //生成十六进制颜色
    function getRandomColor() {
        let str = '#'
        for (let i = 0; i < 6; i++) {
            str += (Math.floor(Math.random() * 16)).toString(16)
        }

        // let color2 = (Math.floor(Math.random() * 16)).toString(16)
        // let color3 = (Math.floor(Math.random() * 16)).toString(16)
        // let color4 = (Math.floor(Math.random() * 16)).toString(16)
        // let color5 = (Math.floor(Math.random() * 16)).toString(16)
        // let color6 = (Math.floor(Math.random() * 16)).toString(16)
        return str
    }
    let res = getRandomColor()
    console.log(res)


    //数组方法 生成十六进制颜色
    function getClor() {
        let arr = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f']
        let str = "#"

        for (let i = 0; i < 6; i++) {
            //定义一个变量 获取随机数下标
            let index = parseInt(Math.random() * arr.length)
            str += arr[index]
        }
        return str
    }
    console.log(getClor())


   (1)js中几乎所有的内置对象,都是通过new来创建的
        new Date()
        new RegExp()
        new Array()
        new Object()
    (2)js中有三种内置对象有简写语法
        数组:  []
        对象:  {}
        正则:  /正则/

发表评论