JavaScript为解释性语言(读一行,执行一行)

一、js的组成部分:

  • ECMAScript(ES3/ES6~9):js的核心语法,定义了语言本身的变量、数据值、操作语句、内存管理
  • DOM: document Object model 文档对象模型,提供了一些属性和方法用来操作dom元素
  • BOM: browser Object model 浏览器对象模型,提供了一些属性和方法用来操作浏览器

注意:当代项目开发,一般都是基于Vue/React完成的,基于这两个框架,我们已经不去操作DOM了,我们来操作数据,由框架本身帮助我们完成DOM的操作。
window.location.href=”http://www.baidu.com“; 让网页进行跳转
window.location.href 获取网页地址

二、ECMA 核心语法

变量和数据类型

1、变量(一个值的容器)

创建变量的六种方式:
  • var 声明一个变量(es3)
  • function 声明一个函数(es3)
  • const 声明一个常量(es6)
  • let 声明一个变量(es6)
  • class 声明一个类
  • import 基于es6模块导入一些信息(es6)

2、js 的命名规则

  • 区分大小写
  • 遵循驼峰命名法,由数字、字母、下划线、$组成,但是不能以数字开头;起语义化的名字;
    • 基于$开头,一般代表使用JQ或者其他使用$的类库获取的内容
    • 基于_开头,一般代表全局或者公开的变量
    • 基于数字区分相似名称的变量
      • let box1 = 10;
      • let box2 =20;
    • 想要分隔单词,可以使用_或者驼峰
  • 不能是关键字或者保留字
    • 关键字:就是代表特殊含义和功能的名字,比如var、function
    • 保留字:以后可能会成为关键字,只是现在预先保留占用

3、两种简单的调试方式

  • alert() //弹出框 (会把数据默认转换成字符串类型
  • console.log() //打印

4、数据类型

  • 基本数据类型(栈,按值访问)
    • number(NAN(not a number)也是number类型)
    • string
    • boolean
    • null
    • undefined

null和undefined的区别!!》》》day02笔记
  • 引用数据类型(堆,按空间操作)
    • function
    • object
      • 普通对象
      • 数组
      • 正则
      • math
      • date
  • es6新增的Symbol(唯一的数据)

    5、基本数据类型和引用数据类型的区别

    基本数据类型的访问是按值访问,就是说可以操作保存在变量中的实际值
  1. 基本数据类型的值是不可变的(不能給基本数据类型添加属性和方法);
  2. 基本数据类型的比较是值的比较;
  3. 基本数据类型的变量是存放在栈里边

    对象是属性和方法的集合,就是说引用数据类型可以拥有属性和方法
  4. 引用数据类型的值是可变的

  5. 引用数据类型的值是同时保存在栈内存和堆内存的对象
  6. 引用类型的比较是引用的比较
    1. var person1 = '{}';
    2. var person2 = '{}';
    3. console.log(person1==person2); //true 比较的是两个字符串
    4. var person1 = {};
    5. var person2 = {};
    6. console.log(person1==person2); //false 比较的是两个对象

    6、对象和对象比较的是空间地址

    1. []==[]; //false 空间地址不同

    7、对于不同的数据类型在比较的时候,除了以下的,剩下的都是先转换为数字类型在进行比较

  • 对象和字符串比较的时候, 先把对象转换为字符串,再进行比较;
  • null和undefined永远不等于任何一种数据类型,除了null==undefined、null===undefined(false);
  • NaN永远不等于任何一种数据类型
    1. []==true ;//false
    2. ![]==true;// ===>先计算左边:![];转为布尔并取反(false)===>false==true;//false
    3. ![]==[]; //true 布尔==对象(两边都转换为number) ![]==>false==>0 Number([])=0

1. number类型

正数、负数、0、小数、NAN

NAN不等于NAN

2. string

把字符用单引号或者双引号抱起来的就是字符串类型

  1. var num = 1;
  2. var num2 = "1";
  3. var num3 = '1';

3. boolean 布尔类型

trun、false

4. null和undefined
  • null:空的对象指针
  • undefined:未定义

5. 普通对象
  • 普通对象:把属性名和属性值用大括号括起来的。
  • 属性名(key、键):代表具有一定特征的名字(一般只有数字和字符串)
  • 属性值(value、值):具体的值(可以是任意的数据类型)

6. 数组 []

7. Math 主要用来操作数字
  1. Math.random(); // 获取0-1之间的随机数
  2. Math.abs(-1.1); // 绝对值
  3. Math.round(1.5); //四舍五入

8. date日期
  1. new Date()
  2. Mon Nov 09 2020 15:08:13 GMT+0800 (中国标准时间)

9. symbol 唯一的数据 es6新增
  1. var str1 = Symbol("haha");
  2. var str2 = Symbol("haha");
  3. console.log(str1 == str2); //false

三、把其他数据类型转换为number的方法

  1. Number() 方法
    • 字符串:
      • 如果是空字符串,转换为0
      • 如果是字符串中包含非有效数字,转换为NAN
    • 布尔类型
      • true:转换结果1
      • false:转换结果0
    • null:0
    • undefined:NAN
    • 对象:如果是引用数据类型的,转换为数字类型的时候,会隐式的先调用toString()方法,然后再用Number转数字;
  1. > var obj = {name:"123"};
  2. < undefined
  3. > obj.toString();
  4. < "[object Object]"
  5. > Number(obj);
  6. < NaN
  1. > var a = [];
  2. < undefined
  3. > a.toString();
  4. < ""
  5. > Number(a);
  6. < 0
  1. > var b = [1,2,3];
  2. < undefined
  3. > b.toString();
  4. < "1,2,3"
  5. > Number(b);
  6. < NaN
  1. > var c = [1];
  2. < undefined
  3. > c.toString();
  4. < "1"
  5. > Number(c);
  6. < 1

2、parseInt 把字符串转换成整数(从左向右查找,遇到非有效数字或者小数点就停止查找)

  1. > parseInt("12px23");
  2. < 12
  3. > parseInt("12.6555kkk");
  4. < 12
  5. > parseInt("12 3");
  6. < 12
  7. > parseInt("dasdas");
  8. < NaN

3、parseFloat 把字符串转换为浮点型(可以识别到小数点)

  1. > parseFloat("12.5");
  2. < 12.5
  3. > parseFloat("12.5sada");
  4. < 12.5
  5. > parseFloat("kk12.5sada");
  6. < NaN
  7. > parseFloat("12.5.6");
  8. < 12.5

NAN !=NAN

四、isNaN 用来判断是否为有效数字,返回结果是布尔数据类型

如果说判断的这个数据不是数字类型,先隐式调用Number()方法转换为数字类型,再判断

  1. isNaN(1);
  2. > false
  3. isNaN("2");
  4. > false
  5. isNaN(true);
  6. > false
  7. isNaN(false);
  8. > false
  9. isNaN(null);
  10. > false
  11. Number(null);
  12. > 0
  13. isNaN(0);
  14. > false
  15. isNaN(undefined);
  16. > true
  17. isNaN({name:"lili"});
  18. > true
  19. Number({name:"lili"});
  20. NaN
  21. isNaN("NAN");
  22. true
  23. isNaN([1, 2, 3]);
  24. > true
  25. [1, 2, 3].toString();
  26. "1, 2, 3"
  27. isNaN("1, 2, 3");
  28. true

五、字符串

1、字符串的长度

  • 获取字符串长度 变量.length
  • 最后一个字符对应的索引 变量.length-1
  • 索引: 每个字符对应的下标
  • 获取相应的字符: 变量名[索引]

2、字符串的计算

  • 字符串的加法除了计算,(遇到字符串)还可能是字符串的拼接
  1. var i = "5";
  2. i++;
  3. console.log(i); //6
  4. // 加法中 遇到字符串,就会进行字符串的拼接
  5. console.log("6" + 10); //610
  6. //加法中 遇到引用数据类型,首先调用.toString()方法,再进行字符串拼接
  7. 6+{}; // 6+"[object Object]"="6[object Object]"
  8. 6+[]; // 6+""="6"
  9. // 对于- * / 会首先应用Number()方法,再计算
  10. console.log("6"/2); //3
  11. console.log("6"-2); //4
  12. console.log("6"*2); //12
  13. 6-{}; // 6-NaN=NaN

3、把其他数据转换为字符串的方法

  • 数据.toString();
  • String(数据);
  • null和undefined转换为字符串的结果”null”和”undefined”,但是null和undefined不能用.toString()方法,会报语法错误。

    六、把其他数据转换为布尔

  1. Boolean();
  2. ! 转换为布尔取反;
  3. !! 转换为布尔取反再取反;
  4. 把其他数据类型转换为布尔,除了以下五种情况,转化的结果为false,剩余的都为true
    • null
    • undefined
    • “”
    • NaN
    • 0