[前端] script 与 noscript、基本语法、变量、数据类型

script 与 noscript:

script 用来在 html 中引入 JS 代码,而当浏览器不支持 JS 或 JS 被禁用时,浏览器会用 noscript 的内容替代页面其它内容进行展示。
基本语法:
ECMAScript 的语法很像 C,标识符规则只多了一个 $ 符号,注释、语句等基本相同。
严格模式:
ECMAScript 在严格模式下有不同的解析和执行模型,不确定的行为会被处理,不安全的操作也会抛出错误。使用严格模式只需在文件顶部添加指令:"use strict";
也可以仅指定某个函数在严格模式下执行,在函数体第一行写上 "use strict"; 即可。
关键字和保留字:
关键字指在语言中有特殊用途的字符串,保留字指将来可能被用作关键字的字符串,这两种字符串都不能被作为标识符来命名。
变量:
ECMAScript 的变量是动态类型的,可以保存任何类型的数据,在赋值时自动完成类型转换,声明变量的关键字有 var、let、const,自 es6 起不提倡使用 var,也可以不声明直接使用,这样是创建全局变量。
数据类型:

ECMAScript 有 6 种基本数据类型:undefined、null、string、boolean、number、symbol(ES6),一种引用数据类型:Object。
typeof 操作符:判断常量、变量的数据类型。
Undefined 类型:当变量声明未赋值时,默认值就是 undefined。
Null 类型:该类型只有一个值 null,是个对象,并且 null == undefined 成立,习惯上,会将准备用来存储对象的变量初始化为 null。
Boolean 类型:只有两个值 true、flase,区分大小写,与 C 不同,JS 中的 boolean 值与数值不是一回事,JS 的所有数据类型都与 Boolean 类型有等价的值,并且 可以将其转换为 Boolean 类型,用函数 Boolean() 即可。
Number 类型: JS 的 Number 类型大致分为整数、浮点数、NaN 三类。
整数:
整数有十进制、八进制、十六进制三种,以 0 开头是八进制,0x 开头是十六进制。运算时,所有八进制、十六进制都会先被转换为十进制进行运算。
浮点数:
JS 的浮点数必须包含一个小数点且其后要有一位非零数字,否则就会被判定为整数存储。浮点数可以使用科学计数法表示,比如 1.23e5 就是 123000。另外,JS 的浮点数计算总会有偏差,因此浮点数一般不参与条件判断,例如 0.1 + 0.2 = 0.300000000004,这个误差导致 0.1 + 0.2 == 0.3 为 false,当然可以通过指定个范围比如 0.1 + 0.2 - 0.3 > -0.0001 && 0.1 + 0.2 - 0.3 < 0.0001 来避免这个问题,但通常是直接避免浮点数参与逻辑表达式的运算。
数值范围:
ECMAScript 规定最值分别为 Number.MIN_VALUE、Number.MAX_VALUE,大多数浏览器中分别是 5e-324 和 1.7976931348623157e+308。若超出 范围会被转换为 Infinity 值,即正无穷或负无穷,如果要程序判断一个数字是否在范围内,可以使用函数 isfinite(),该函数会返回一个布尔值,true 代表在范围内。
NaN:
非数值类型,数值与其它类型进行运算结果大多等于 NaN,NaN 与任何值都不相等包括它本身,NaN 与任何值的运算结果都是它本身。关于 NaN 有个函数 isNaN() 可以判断参数是否是 NaN。
数值转换:
有三个常用函数,Number()、parseInt()、parseFloat(),第一个可以用于任何数据类型,后两个专门把字符串转为数值。
Number():Boolean 值对应 1、0,null 对应 0,undefined 对应 NaN,仅含数字的字符串会转换为对应的十进制数字,含其它字符的字符串返回 NaN。
parseInt()、parseFloat():分别用来转换整数、浮点数字符串,只要第一个非空格字符是数字就可以进行转换,若不是则返回 NaN。
String 类型:用单/双引号包含的,由 0 或多个 Unicode 字符组成的字符序列,具有 length 属性保存其长度。
转义字符:例如 \n、\t、\b(退格)、\r(回车)、\\ 等,一个转义字符代表一个字符。
字符串不可变:JS 字符串的值无法更改,只能销毁重建,例如:
let a = "你";
a = a + "我";
过程是销毁 "你"、"我",再创建 "你我" 赋值到 a,如果你尝试像 C 一样直接通过 a[0] 的形式修改字符串,是会失败的。
转换为字符串:
任何数据都可以转为字符串,两种方式,一是调用 toString() 方法,除 null、undefined 外都能使用该方法。第二种是使用 String() 函数,该函数会先尝试调用 toString() 方法,如果是 null 或 undefined 则返回 "null" 或 "undefined"。
Object 类型:
创建对象可以用 let 对象名 = new 构造函数(); 来创建(new 可省略),也可以用 let 对象名 = { 属性名:值 , ... } 这种字面量形式来创建,也可以后续直接用 对象名.属性或方法名 = ... 的形式添加属性或方法,下面是几个每个对象都有的属性、方法:
constructor:保存着创建当前类型对象的函数。
hanOwnProoerty(PropertyName):检查某对象的实例是否存在某属性,参数就是属性名。
isPrototypeOf(object):检查参数是否是当前对象的原型。
PropertyIsEnumerable(propertyName):检查某属性是否能使用 for-in 语句来枚举。
toLocaleString()、toString()、valueOf():基本都是返回对象的字符串表示,略有差异。