JavaScript基础细节

本文深入探讨JavaScript的数据类型,如NaN和undefined的区别,以及表达式的严格与非严格比较。讲解了数组的声明与动态长度特性,函数的定义、调用、自调用及作为参数和返回值的使用。同时,分析了JS的作用域特点,包括隐式全局变量和预解析机制。

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

部分与编译型语言有区别的语法

数据类型

NaN:表示不是数字
undefined:未初始化

表达式:
==:不严格的判等 “10” == 10 true
===:严格的判等 “10”===10 false
!==
!===

分支结构

switch 语句中 用的是严格的判等


数组

声明方式:

 var array  = new Array();  // 空数组
 var array  = new Array(10);  // 内容为undefined
 var array  = new array(10,20,30); //number数组
 var array = []; //空数组
 var array = [10,20,30]; //number数组

数组长度可以改变

 var array = []; //声明一个空数组
 var array[0] = 10; //往里面添加元素
 var array[1] = 20;
 console.log(array.length) //数组长度改变

函数

  1. 定义
//声明
function fun(){
}
//参数不需要声明类型(没法声明类型)
function fun(x,y){
}
//如果没有返回值或return; 则会得到一个undefined
console.log(fun(1,2)); 
  1. arguments对象
    arguments就是参数列表的数组(伪数组)
function fun(){
	//此操作可以显示传入的参数长度,即使函数参数列表没有声明。
	console.log(arguments.length);
	console.log(arguments);//打印参数列表的值
}
fun(1,2,3);
  1. 命名函数与匿名函数
var fun = function () {
}
这种方式叫函数表达式

普通同名函数,后定义的函数会覆盖前面的函数,而函数表达式和变量赋值类似。
4. 函数自调用

(function () {
          console.log("aaaa")
})();
  1. 函数作为参数使用:
 function f1(f2) {
         f2();
         console.log("bbbb");
     }

function f2() {
        console.log("aaaa");
    }
f1(f2);
  1. 函数作为返回值使用
 function f1() {
        return function () {
            console.log("aaaa");
        }
     }
var ff = f1();

ff();

总结:
函数名的本质就是函数体。
函数的数据类型是function。


JS中的作用域

  1. 两个script标签可以使用一个变量
    ** js里没有块级作用域
    只有函数中声明的吧变量是局部变量,其他任何位置声明的变量都是全局变量。
<script>
    var num = 1;
</script>
<script>
    alert(num); //1
</script>
  1. 隐式全局变量
function f() {
    num = 10; //不用var声明.
    delete num;  
}
//可以访问到函数内的变量,因此此函数不会被释放内存
console.log(num);

//delete 关键字可以删除隐式全局变量
delete num;
//但无法删除var声明的变量

JS中的预解析

js代码会预先声明变量,只要变量被声明,无论变量在什么位置,解释器会提前声明,
函数会调整顺序,无论函数体在什么位置,只要有这个函数,就能被整确调用。

注意

var num = 1;
function f1() {
	  //隐式的var num;
      console.log(num);  //此结果仍然是undefined 因为js会预解析
      var num = 20;
}
f1();

f1();
var num = 1; //函数会被提前,这个变量的声明也会提升到变量使用之前
function f1() {
     console.log(num);  //此结果仍然是undefined
}

function f1() {
      console.log(num);  //此结果仍然是undefined
      var num = 1;
}
f1();
console.log(num);  //报错、提升只会在作用域里面进行

//多个标签预解析不冲突(各标签各玩各的)
<script>
    f1(); //aaaa

    function f() {
        console.log("aaaa"); 
    }
</script>
<script>
    f1(); //bbbb

    function f() {
        console.log("bbbb");
    }
</script>

console.log(a); // a的函数体
function a() {
    console.log("123");
}
var a = 10;
console.log(a); //10;

//提升时,总是变量在前,函数在后进行提升
```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值