JavaScript 高级程序设计 - 第二章 在HTML中使用JavaScript & 第三章 基本概念

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/seayoungsjtu/article/details/82373681

JavaScript 高级程序设计 - 第二章 在HTML中使用JavaScript & 第三章 基本概念

<script> 元素的重要属性

  • defer:表明脚本在执行时不会影响页面的构造,脚本会被延迟到整个页面都解析完毕后再运行,即延迟到 </html> 标签后执行。HTML5 要求脚本按照出现的先后顺序执行,因此第一个延迟脚本会先于第二个延迟脚本执行,而两个脚本会先于 DOMContentLoaded 事件执行。defer 属性只适用于外部脚本文件
  • async:表明脚本异步执行,目的在于不让页面等待两个脚本下载和执行,从而异步加载页面其他内容,因此建议异步脚本不要在加载期间修改 DOM。异步脚本不保证按照先后顺序执行。async 属性只适用于外部脚本文件

JavaScript 语法

严格模式

严格模式下一些不确定的行为将会得到处理,而对不安全的操作会抛出错误。使用如下代码启用严格模式:

"use strict"

数据类型

  • 五种基本数据类型:Number,String,Boolean,Null,Undefined
  • 一种复杂数据类型:Object

typeof 操作符

检测给定变量的数据类型,返回值为对应变量类型的字符串,但 typeof(null) 返回"object"

Undefined 类型

直接看例子:

var a;                 //声明后默认取得undefined值
// var b;                这个变量没有被声明
alert(a);              //"undefined"
alert(b);              //错误
alert(typeof a);       //"undefined"
alert(typeof b);       //"undefined"

Null 类型

  • 如何理解 typeof(null) 返回 “object”:null 值表示一个空对象指针
  • undefined 值派生自 null 值,因此相等性测试返回 true
  • 如果定义的变量将被用于保存对象,则最好初始化为 null

Boolean 类型

Boolean 与其他类型的转换:

  • 非空串转换为 true,空串转换为 false
  • 任何非零数字转换为 true,0 和 NaN 转换为 false
  • 任何对象转换为 true,null 转换为 false
  • undefined 只能转换为 false

Number 类型

  • 如果小数点后没有任何数字,或浮点数值本身就是一个整数,则该值会被转换为整数
  • 永远不要用浮点数值进行相等测试
  • 如果某次计算结果超出了数值范围,这个值将被自动转换为特殊的 Infinity 值,并不能继续参与下一次的运算。Infinity 值可以通过 isFinite() 检测
  • NaN 用于表示一个本来要返回数值的操作数未返回数值的情况。任何涉及 NaN 的操作都会返回 NaN,且 NaN 与任何值都不相等,包括 NaN 本身。可通过 isNaN() 检测。
  • 正数除以 0 返回 Infinity,负数除以 0 返回 -Infinity,0 除以 0 返回 NaN
  • 使用 Number() 进行数值转换的规则:
    • Boolean 转换为 0 和 1
    • null 转换为 0
    • undefined 转换为 NaN
    • 对象调用 valueOf() 方法,若结果是 NaN,则调用对象的 toString() 方法,按照 String 规则转换
    • String 则遵循以下规则:
      • 如果字符串中只包含浮点数或整数格式,则直接进行转换,前导零将被忽略
      • 如果字符串中包含有效十六进制格式,则转换为相同大小的十进制数值
      • 如果字符串为空串,则转换为 0
      • 其他格式字符串转换为 NaN

Object 类型

Object的通用属性和方法:

  • constructor:保存着用于创建当前对象的函数
  • hasOwnProperty(propertyName):检查给定属性在当前对象实例中
  • isPrototypeOf(object):检查是否是传入对象的原型
  • propertyIsEnumerable(propertyName):属性是否能够使用 for-in 语句进行枚举

语句

for-in 语句

  • 循环输出对象属性顺序不可预测
  • 在 ECMAScript 5 中,若被循环对象为 null 或 undefined,不再抛出错误,而是不执行循环体。

with 语句

将代码作用域设置到一个特定的对象中,在 with 语句的代码块内部,每个变量首先被认为是一个局部变量,而如果在局部环境中找不到该变量的定义,就会查询 location 对象中是否有同名的属性。如果发现了同名属性,则以 location 对象属性的值作为变量的值。看例子:

var hostName = location.hostname;
// equals to
with(location) {
	var hostName = hostname;
}

严格模式下不允许使用with语句,否则将视为语法错误。

switch 语句

  • JavaScript switch语句使用“===”进行相等判断

  • 不限数据类型,甚至可以是表达式

  • 一种神奇的用法

      var num = 25;
      switch (true) {
      	case num < 0:
      		alert("Less Than 0");
      		break;
      	case num >= 0 && num <= 100:
      		alert("Between 0 and 100");
      		break;
      	case num > 100:
      		alert("Greater Than 100"):
      		break:
      	default:
      		alert("WTF");
      }
    

函数参数

ECMAScript 函数不介意传递进来多少个参数,也不在乎传进来参数是什么数据类型。也就是说,即便你定义的函数只接收两个参数,在调用这个函数时也未必一定要传递两个参数。ECMAScript 中的参数在内部是用一个数组来表示的。函数接收
到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话)。在函数体内可以通过 arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。

arguments 对象只是与数组类似,它并不是 Array 的实例,可以使用方括号语法访
问它的每一个元素,使用 length 属性来确定传递进来多少个参数。

猜你喜欢

转载自blog.csdn.net/seayoungsjtu/article/details/82373681