JavaScript学习笔记Sep-2019 `P1

JavaScript学习笔记 P1 2019-9

01_数据类型

2019年9月8日21:29


在JS中声明所有的数据类型都用var来声明

  • String
  • Number
  • Boolean
  • Null
  • Undefined
  • Object

其中String、Number、Boolean、Null、Undfined属于本数据类型
Object属于引用数据类型

String字符串

  • 在JS中字符串需要使用引号(单引号或者双引号)引起来
  • 在String字符串中引号不能嵌套,可以使用单引号嵌套双引号的方式或者双引号嵌套- 单引号,或者可以转意符号 \ ; 比如 \' 表示 ' ; \" 表示 \" ; \\ 表示 \

Number类型

  • 在JS中所有的数字都是Number类型包括整数和浮点数
  • Number类型不用引号包起来
  • Number.MAX_Value 可以表示Number的最大值
  • Number.MIN_VALUE 表示0以上的最小值
  • Infinity表示正无穷
  • Infinity表示负无穷
  • NaN也是一个Number类型 表示不是一个数字(Not A Number)

Boolean类型 – 布尔值

  • Boolean主要表示逻辑判断–true/false

Null类型 – 空值

  • 专门表示一个为空的对象 null
  • 用typeof检测一个null值时,会返回object

Undefined类型 – 未定义

  • 当声明了一个变量但是并没有赋值的时候就是Undefined
  • 用typeof检测Undefined会返回Undefined

02_强制类型转换

2019年9月9日22.01


将一个数据类型强制转换为其他的数据类型

将一个数据类型转换为String类型

方法 一:toString()方法

  • 调用被转换数据的toString()方法
  • 该方法不会影响原变量,要将转换的值赋值给变量
  • null和undefined没有toString()方法,如果调用null或者undefined的toString()方法会报错

方法 二: String()函数

  • 调用String()函数,并将转换的数据作为参数传递给String函数
  • String()函数可以将null或者undefined转换成字符串
  • String()函数会将null直接转换成"null"会把undefined直接转换成"undefined"

将一个数据类型转换为Number类型

方法 一: Number()函数

  • 如果转换的字符串中时纯数字的内容,就直接转换成数字;如果在字符串中含有其他类型就会转换成NaN
  • 如果转换的的字符串中是全空格或者是null时,会转换为0
    • “ “ \ null –> 0
    • boolean
      • ture –> 1
      • false –> 0
    • undefined –> NaN

      方法 二:parseInt() \ parseFloat()函数

  • 专门用于字符串
  • parseInt() 把一个字符串转换为一个整数
  • 将一个字符串中有效的整数内容取出来 ==》转换成Number
  • 如果在字符串中遇到了非整数就只会截取这个非整数之前的Number
  • parseFloat() 把一个字符串转换为一个浮点数
  • 可以获取一个字符串中有效的小数
  • 如果对一个非String类型使用 parseInt() \ parseFloat() 会将该类型先转换为一个String类型的值,然会再进行转换操作
    • null –> “null” –> NaN
    • boolean
      • true –> "true" –> NaN
      • false –> "flase" –> NaN
      • unfined –> "unfined" –> NaN

将一个数据类型转换为Boolean类型

  • 使用Boolean()函数
    • 数字转成Boolean类型
      • 除了0和NaN全都会转换成true
    • 字符串转换为Boolean类型
      • 除了空字符串其余都是true
    • null –> false
    • undefined –> false
    • 对象也会转换为true

03_Object对象

2019年9月9日12:54


如果一个值不是String、Number、Boolean、Null、Undefined就是Object类型

基本数据类型都是单一的值 值和值之间没有任何的联系 如果使用基本数据类型,创建的变量都是独立的,不能成为一个整体

对象属于一种复合的数据类型,在对象中可以保存多个不同的数据类型

对象的分类:

  1. 内建对象

    1. 由ES标准中定义的对象,在任何的ES的实现中都可以使用
    2. 比如:Math String Number Boolean Function Object ……
  2. 宿主对象

    1. 有JS的运行环境提供的对象,目前来讲是由浏览器提供的对象
    2. 比如:BOM DOM
  3. 自定义对象

    1. 由开发人员自己创建的对象

4_自定义对象

2019年9月9日13:48


创建对象

  • 使用new关键字调用的函数,是构造函数constructor来创建对象

  • 构造函数是专门用来创建对象的函数

  • Example: var obj = new Object();

    • 使用typeof检查一个对象时,会返回object
  • 使用对象字面量来创建一个对象:

    Example: `var obj = {};`
  • 可以直接在{}中指定对象中的属性:

    Example: `var obj = {Name : "孙悟空", Gender : "男" , ……};`
  • 对象字面量中的属性名可以加’’"“ 也可以不加,但是如果使用的是也写特殊的名称则必须加’’"“

    Example: `var oooo = {"9823j#*#@" : 2394};`
  • 两个属性中用, 隔开 最后一个不加,

在对象中保存的值称为属性

  • 向对象中添加属性

    • 语法: Object.Prop = “Value”
    • Example: obj.Name = "孙悟空";
  • 读取对象中的属性

    • 语法:Object.Prop
    • Example: console.log(obj.Name);
    • 如果读取的变量中没有该属性,则会返回Undefined
  • 修改对象中的属性值

    • 语法:Obeject.Prop = “New Value”
    • Example: object.Name = "白骨精";
  • 删除对象中的属性

    • 语法:delete Object.Prop
    • Expample: delete obj.Name

属性名:

  • 对象的属性名不强制要求遵循标识符的规范– 什么都能用 – 但是尽量按照标识符的规范命名

  • 如果使用特殊的属性名,不能采用.的方式操作

    • 需要采用[]方式:
      • 语法: Object[“Name”] = “Value”;
      • Example: obj["123914"] = "129401";
    • 如果采用了[]方式声明属性,那也要用[]方式来读取对象
      • Exapmle: console.log(obj["123914"]);
  • 使用[]这种形式去操作属性,更加的灵活,在[]中可以直接传递一个变量:

    • Example:
      1
      2
      3
      4
      5
      6
      obj["ex1"] = "Ex1Value";
      obj["ex2"] = "Ex2Value";
      var n = "ex1";
      console.log(obj[n]); --> "Ex1Value"
      n = "ex2";
      console.log(obj[n]); --> "Ex2Value"

属性值:

  • JS对象中的属性值 可以是任意的数据类型 也可以是一个对象
    1
    2
    3
    4
    5
    6
    7
    8
    obj.se = "value";
    obj.se = 12314;
    obj.se = true;
    obj.se = null;
    obj.se = undefined;
    var obj2 = new Object();
    obj2.se2 = "Value";
    obj.se = obj2;

in 运算符

  • 可以检查一个对象中是否含有属性名
  • 语法: *”PropName” in Object*
  • Example: "se" in obj
  • 会返回一个布尔类型的值 – true & false

05_基本和引用数据类型

2019年9月9日13:40


基本数据类型:

  • String
  • Number
  • Boolean
  • Null
  • Undefined

引用数据类型:

  • Object

引用数据类型指向堆中的地址, 基本数据类型则直接访问栈中的数据

06_Function函数

2019年9月9日18:19


函数_Function

  • 函数也是一个对象
  • 函数是一个可以封装功能(代码)的对象,在我们需要时可以调用
  • funciton在声明时不会执行,只有被调用的时候才会执行
    • 调用方法: FuncitonName();

创建一个函数对象

  • new Funciton(); —> var func = new Function();
  • 可以将要封装的代码以字符串的形式传递给构造函数:
  • -> var func = new Function(“console.log(‘Values’);”);

(不常用 不推荐)


  • 使用函数声明来创建一个函数

语法:

funciton FunctionName([形参1, 形参2, …, 形参3]opt){code…}

  • 使用函数表达式来创建一个函数(匿名函数)

语法:

var FunctionName = function([形参1, 形参2, …, 形参3]pt){code…};

函数的参数:

  • 在定义函数时可以在()内声明形参
  • 在函数调用时在()内指定实参
    • 调用函数时,编译器不会检查传入的实际参数的数据类型, 也不会检查传入实际参数的数量
      • 如果实参的数量多余形参的数量,多余的数将不会参与函数调用
      • 如果实参的数量少于形参的数量,则没有对应的实参就是undefined

07_返回值

2019年9月9日20:11


使用return设置function的返回值

Example:

1
2
3
function sum(a,b,c){
return a + b + c ;
}
  • return后的值会作为函数的执行结果返回

  • 可以定义一个变量(result)接收这个return.

    • Example: var result = sum(1,2,3);
  • 在一个function中return后的语句都不会执行

  • 如果一个return语句后不跟任何值则会返回undefined

  • 如果一个funciton没有return语句也会返回undefined

  • return可以返回任意类型的值

08_作用域

2019年9月9日21:36


作用域

  • 值一个变量的作用范围

  • 在js中共有两种作用域:

    1. 全局作用域

      • 直接编写在script中的js代码,都能在全局作用域

      • 全局作用域在页面打开时创建,在页面关闭时销毁

      • 在全局作用域中有一个全局对象window,代表浏览器的窗口,由浏览器创建
        可以直接在页面中使用

      • 在全局作用域中:

        • 创建的变量都会作为window的属性保存

          1
          2
          var ex = 123;
          console.log(ex); == console.log(window.ex);
        • 创建的函数会作为window的方法保存

          1
          2
          3
          4
                   function func (){
          codes...
          }
          func(); == window.func();
      • 全局作用域声明的变量在页面的任何地方都可以被访问

    2. 函数作用域

      • 调用函数时创建函数作用域,函数执行完毕时,函数作用域销毁
      • 每调用一次函数, 就会创建一个新的函数作用域,他们都是互相独立的
      • 在函数作用域中,可以访问全局作用域中的变量
      • 在全局作用域中,无法访问到函数作用域中的变量
      • 当在函数中操作一个变量时,他会现在自身作用域中寻找,如果找到了就直接使用
        如果没有找到就会向上一级作用域中继续寻找,最终找到全局作用域,如果在全局作用域中依旧没有找到,则会报错ReferenceError
      • 如果直接想访问全局中的变量,只要window. 变量名
      • 如果不使用var关键字;在函数作用域中被变量赋值也会更改全局作用域中的数据

09_变量声明提前

2019年9月9日22:20


变量声明的提前

  • 使用var关键字声明变量时,会在代码执行的最开始被声明
    • 但是变量只声明,不会被赋值
  • 如果var在全局作用域中,则会在全局开始时被声明
  • 如果var在function作用域中,则会在function最开始的时候被声明

函数的声明提前

  • 使用函数声明形式创建的函数function(){}
    • 会在代码执行的最开始被执行– 所以可以在函数声明前调用该函数
  • 使用var 关键字形式创建的额函数var functionName = function(){}
    • functionName 的声明会被提前,但是函数体的定义不会被提前
      – 所以不能在函数声明前调用该函数
  • 不管是在全局作用域还是函数作用域都一样

ToBeContinue…