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:

obj["ex1"] = "Ex1Value";
obj["ex2"] = "Ex2Value";
var n = "ex1";
console.log(obj[n]); --> "Ex1Value"
n = "ex2";
console.log(obj[n]); --> "Ex2Value"

属性值:

  • JS 对象中的属性值 可以是任意的数据类型 也可以是一个对象
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:

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 的属性保存
    javascript var ex = 123; console.log(ex); == console.log(window.ex);
    _ 创建的函数会作为 window 的方法保存
    javascript 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…



JavaScript      JavaScript

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!