【三】JavaScript基本概念 汇总

本文介绍ES5的严栢模式概念及如何启用,探讨变量定义与作用域,详细解释JavaScript中的六种数据类型:Undefined、Null、Boolean、Number、String和Object,包括各自的特性和使用方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.严格模式

    ES5引入严格模式的概念。严格模式为JavaScript定义了一种不同的解析与执行模型。严格模式对某些不安全操作会抛出错误。要在整个脚本中启用严格模式,可以在顶部添加代码

"use strict";
    这行代码是一个编译指示,用于告诉Javascript引擎切换到严格模式。在函数内部的上方包含这条指示,可指定函数在严格模式下执行。
function fun1() {
    "use strict";
    //code
}
2.变量

    ES的变量类型是松散类型的,即可以保存任何类型的数据。var message;这样定义一个变量,像这样未经初始化的变量会保存一个特殊的值undefined。

var message = "Hi";
message = 100;
    message初始保存一个字符串值,后来变为数值,虽然这样做完全有效,但是不建议修改变量所保存值的类型

    另外变量很重要的一点是,通过var定义的变量会成为定义该变量的作用域中的局部变量,离开该作用域后就被销毁。若省去var则会创建全局变量 。但是不推荐省去var创建全局变量的做法。在局部作用域中定义的全局变量很难维护。严格模式下给未经声明的变量赋值会抛出ReferenceError错误。

3.数据类型

    ES中有5种简单数据类型:Undefined,Null,Boolean,Number,String,和1种复杂数据类型Object。ES不支持任何创建自定义类型的机制。

    typeof操作符:检测给定变量的数据类型,返回值undefined,boolean,string,number,object(值为对象或null),function

    Undefined类型:未经初始化的变量的默认值就是undefined。但包含undefined值的变量和尚未定义的变量还是不一样的。对尚未声明的变量只能执行typeof操作符检测其数据类型。然而令人困惑的是typeof对未初始化和未声明的变量都会返回"undefined"。这个结果还是有一定合理性的,因为虽然这两种变量在技术上看有本质区别,但是不管哪种都不能执行真正的操作。

var message;
//var age;//未声明变量
alert(message);//"undefined"
alert(age);//错误
alert(typeof message);//"undefined"
alert(typeof age);//"undefined"
    Null类型:null值表示一个空对象指针。所以typeof检测null值时返回object。如果定义的变量准备将来用于保存对象,那么最好将该变量初始化为null而不是其他值。此外,undefined值是派生自null值。所以alert(null == undefined)会返回true

   Boolean类型:两个值true和false,区分大小写。True和False不是Boolean类型值。所有类型的值都有与这两个值等价的值,调用Boolean()转型函数

                          转换规则:String类型:任何非空字符串->true,“”空字符串->false

                                           Number类型:任何非零数字->true,0和NaN->false

                                           Object类型:任何对象->true,null->false

                                           Undefined类型:undefined->false

   Number类型:八进制字面值第一位必须是0,八进制在严格模式下无效,会抛出错误。十六进制前两位0x。算术计算时,所有八进制十六进制都被转换成十进制。

                         浮点数值,虽然小数点前面可以没有整数,但不推荐这种写法。如var num = .1 。由于保存浮点数值需要的内存空间是保存整数值的两倍,因此ES会不失时机的将浮点数值转换成整数值。浮点数最高精度17位小数,计算时精确度 远远不如整数,如0.1+0.2结果不是0.3,而是0.30000000000000004,因此永远不要测定某个特定的浮点值。(这点是所有基于IEEE754数值的浮点计算的通病)

                         e表示法:默认情况下,ES会将小数点后带有6个0以上的浮点数值转换成e表示法。

                         数值范围:Number.MIN_VALUE和Number.MAX_VALUE,若超出数值范围,会被转换成+-Infinity。如果某次计算返回Infinity值则无法参与下一次计算,通过isFinite()函数可以判断是否超过数值范围。

                        NaN:非数值,用来表示本来要返回数值但未返回数值的情况,这样就不会抛出错误。2个特点:a.任何涉及NaN的操作都会返回NaN b.NaN与任何值都不相等,包括NaN本身。isNaN()函数,接收参数后会将这个值转换成数值,任何不能转换成数值的值都会返回true。isNaN()也适用于对象

                        数值转换:Numer(),parseInt(),parseFloat()

    String类型:用双引号和单引号表示的字符串完全相同。toString()转换字符串,null和undefined没有这个方法String()转型函数可转换任何类型值。

    Object类型:Object类型是所有它的实例的基础,每个实例都具有下列属性和方法:

                        constructor:保存用于创建当前对象的函数。

                        hasOwnProperty(propertyName):用于检查给定的属性是否在当前对象的实例中

                        isPrototypeOf(object):用于检查传入对象是否是传入对象的原型

                        toLocaleString(),toString(),valueOf():返回对象的字符串表示

4.语句

    for语句:ES不存在块级作用域,循环内部定义的变量也可在外部访问到。

    for-in语句:是一种迭代语句,可以用来枚举对象的属性。for(property in expression)

for(var propName in window) {
    document.write(propName);
}
    with语句:将代码的作用域设置到一个特定的对象中。使用with语句的目的是为了简化多次编写同一个对象的工作。由于大量使用with语句会导致性能下降,给代码调试带来困难,因此不建议使用with
with(expression){
    //code
}
5.函数

    参数:函数体内可以通过arguments对象来访问参数数组。

function add(num1,num2){
    arguments[1] = 10;
    alert(arguments[0] + num2);
}
    修改arguments[1]也就修改了num2,但不是说读取这两个值会访问相同的内存空间,内存空间是独立的,只是他们的值会同步