【前端】JS基础语法

本文详细介绍了JavaScript的基本语法,包括运行过程、JS的组成、引入方式、输入输出、定义变量、动态类型、基本数据类型、运算符、分支循环、数组、函数以及对象的创建。讲解了JS的动态特性,如变量类型转换,以及如何定义和操作数组和对象。还探讨了函数的定义和调用,以及局部和全局变量的作用域。
摘要由CSDN通过智能技术生成

JavaScript基本语法

JavaScript运行过程

.html文件是存储在硬盘上的,双击文件,浏览器就会解析代码,将数据以及指令加载到内存中,内存中的指令进而加载到CPU,执行指令

浏览器分成渲染引擎和JS引擎:

  • 渲染引擎解析html+css,俗称内核
  • JS引擎:也就是JS解释器

JS的组成

  • ECMAScript(简称 ES): JavaScript 语法

  • DOM: 页面文档对象模型(就是html文件中的所有标签,一个标签可以看作一个对象), 对页面中的元素进行操作。JS中操作这些标签对象的API就是DOM API

  • BOM: 浏览器对象模型, 对浏览器窗口进行操作 JS中操作浏览器窗口的API就是BOM API

JS的引入方式

行内式

行内式是将JS代码写到开始标签的属性中

<input type="button" value="这是按钮" onclick="alert('哈哈哈')">

onclick是input标签的属性(大部分标签都有这个属性),当点击该标签时,才会触发onclick属性中的JS代码,alert()是DOM API中的一个函数,弹出一个对话框。每点击一次,就会触发一次对话框

image-20220923225145991

内嵌式

内嵌式是讲JS代码写到script标签中

<script>
    alert('哈哈')
</script>

image-20220923225402092

一运行就弹出该对话框

外部式

外部式是将JS代码写到一个单独的文件中,然后再使用script标签引入这个文件

<script src="js_demo.html"> </script>
//外部文件中的内容:
alert('我是外部文件')

image-20220923225935739

输入输出

输入

输入可以使用prompt()函数弹出一个输入框

<script>
    prompt('请输入你的名字:')
</script>

image-20220924122249496

输出

输出可以使用alert()函数以及console.log()函数:

  • alert()函数是直接弹出一个对话框
<script>
    alert('这是一个对话框')
</script>

image-20220924122558736

  • console.log()是在控制台打印输出
<script>
    //向控制台打印输出
    console.log('这是一条日志');
</script>

image-20220924122811350

console是一个JS中的对象,console.log()代表调用控制台对象的log()方法

定义变量

定义变量:

<script>
    var name = '郝少康';
    var age = 20;
    let name1 = '乔仕佳';
    let age1 = 20;
    alert(name);
</script>

使用var关键字定义一个变量,但是var只是表示是一个变量,并不表示是一个什么类型的变量。那这个变量具体是什么类型是根据初始化的值来推导的。初识化的值是一个数字,那该变量就是一个number类型,初始化的值是一个字符串,那该变量就是一个string类型。

JS中不区分整型和浮点型,数字都是number类型

也可以使用let代替var,用法一样。

查看变量类型:

<script>
    var name = '郝少康';
    var age = 20;
    var age1 = 20.5;
    console.log(typeof(name));
    console.log(typeof(age));
    console.log(typeof(age1));
</script>

image-20220924124520522

字符串拼接:

<script>
    var name = prompt('请输入名字');
    var age = prompt('请输入年龄');
    var score = prompt('请输入分数');
    alert('名字:'+name+' 年龄:'+age+' 分数:'+score);
</script>

获取到的名字,年龄,分数都是string类型,都是可以类似java中一样字符串拼接的,string类型和number类型之间也是可以拼接的:

<script>
    var name = '郝少康';
    var age = 20;
    alert(name+age);
</script>

image-20220924125521208

动态类型

动态类型是指一个变量在运行过程中的类型可以发生改变(JS);与之对应的静态类型则是在运行过程中,变量的类型不能发生改变(C,Java)

<script>
    let name = 100;
    console.log(typeof(name));
    name = '10';
    console.log(typeof(name));
</script>

上面代码中name本来是number类型的,然后可以被赋值为字符串,那他就是运行过程中该变了变量的类型,所以这是动态类型。如果放到C或Java中,肯定是会编译报错的。

image-20220924144755473

==注意:==如果是用var来定义的变量,那变量不管是number类型还是string类型,在控制台中显示的都是string类型,所以如果要真正显示变量的类型,得用let来定义变量。

基本数据类型

1️⃣number类型

var i = 10;
var name = '啊哈哈';
let m = 10.5;
let address = '北京';

对于整数和浮点数来说,他们都是number类型,在JS中没有明确区分

2️⃣string类型

引用字符串可以用单引号也可以用双引号,字符串也可以进行拼接

var name = '郝少康';
var name2 = "乔仕佳";

3️⃣boolean类型

boolean有两种取值:true false

<script>
    var tmp1 = false;
    var tmp2 = true;
    console.log(tmp1+1);
    console.log(tmp2+1);
</script>

image-20220924150314545

boolean类型有一个特殊的地方,在于可以和数字进行运算,实际上是把布尔类型隐式的转换为数字类型,false转换为0,true转换为1。这点和C语言类似,和Java不同

如果一门语言非常支持隐式类型转换,那就是弱类型语言,比如JS

如果一门语言不太支持隐式类型转换,那就是强类型语言,比如Java

强弱类型指的是类型之间的界限是否清晰,界限越严格类型越强。

强弱类型和动态静态类型区分:

强弱类型是指类型在需要的场合下是否能发生隐式类型转换,只是在运算的时候转换一下类型参与运算,但变量的原类型不改变。动态类型是可以直接把变量的原类型改变,静态类型是运行时变量的原类型不能发生改变

<script>
    // 弱类型(变量的类型在需要转换的场合下可以发生转换)
    var tmp1 = false;
    var tmp2 = true;
    console.log(tmp1+1);
    console.log(tmp2+1);
    // 动态类型(变量类型在运行过程中发生改变)
    var name = '哈哈';
    name = 10;
    alert(name);
</script>

image-20220924160423561

4️⃣undefined类型

这个类型只有一个值:undefined

如果一个东西没有被定义,然后去访问,就会得到一个undefined

<script>
    // 访问未定义的变量
    var a;
    console.log(a);
    // 访问未定义的属性
    var str = 'dfhk';
    console.log(str.a);
</script>

以上两种情况都会得到一个值:undefined

image-20220924161125942

undefined既是一个类型,又是一个值

另外,由于JS是一个弱类型,undefined可以和字符串进行拼接,拼接时把undefined类型的值:undefined转换为一个string类型进行拼接

但是如果undefined类型和数字进行相加,就会得到一个NAN(not a number)

5️⃣null类型

这个类型也是只有一个值:null

<script>
    //a就是一个null类型变量
    var a = null;
    //null类型和数字相加
    console.log(a+10);
    //null类型和字符串拼接
    console.log(a+"哈哈")
</script>

image-20220924162253042

6️⃣object类型

JS中没有类这一概念,所有的对象都是object类型。


此外,在数据类型这一块还有一个官方承认的BUG:

<script>
    console.log(typeof(undefined));
    console.log(typeof(null));
</script>

image-20220924162753317

undefined这个值的类型确实是undefined类型,但是null这个值的类型却是object类型,这时官方承认的一个BUG,只不过一直没有改正。

运算符

运算符和java大部分是一样的,只有一点区别,那就是比较相等符号:

  • ==比较是否相等(会进行隐式类型转换)
  • ===比较是否相等(不会进行隐式类型转换)
<script>
    var a = 10;
    var b = '10';
    console.log(a==b);
</script>

像这样使用==比较是否相等就会将数字转换为对应的字符串再比较,那所以结果自然就是true。

如果使用===:

<script>
    var a = 10;
    var b = '10';
    console.log(a===b);
</script>

使用===不会进行隐式类型转换,所以结果是false

分支循环

分支循环语句和java那里一样,都是while循环,for循环,if else语句,switch case语句

数组

创建数组

1️⃣方式一:

<script>
    var arr = new Array();
    arr[0] = 10;
    arr[1] = '哈哈';
    console.log(arr);
</script>

2️⃣方式二:

<script>
    var arr = [];
    arr[0] = 10;
    arr[1] = '哈哈';
    console.log(arr);
</script>

3️⃣方式三:

<script>
    var arr = [10,'哈哈',null];
    console.log(arr);
</script>

JS中数组中的元素可以不要求统一,可以是不同类型

访问数组

<script>
    var arr = [10,'哈哈',null];
    console.log(arr[0]);
    console.log(arr[1]);
    console.log(arr[2]);
    // 不合法下标则返回undefined
    console.log(arr[-1]);
    console.log(arr[10]);
</script>

image-20220924184359139

新增数组元素

新增数组元素的几种方式:

1️⃣通过修改数组的长度

<script>
    var arr = [10,'哈哈',null];
    //如果修改后的长度大于原数组长度,就新增元素,如果小于,就删除数组元素
    arr.length = 10;
    for(var i = 0;i<arr.length;i++){
        console.log(arr[i]);
    }
</script>

image-20220924184913896

可见新增的元素是undefined类型

2️⃣通过下标新增:

<script>
    var arr = [10,'哈哈',null];
    arr[10] = 10;
    console.log(arr);
</script>

image-20220924190502496

通过下标新增,中间元素就是undefined类型

但是如果下标是负数,或者是其他类型如:string,那就会在数组中新增键值对

<script>
    var arr = [10,'哈哈',null];
    arr[-1] = 10;
    arr['郝少康'] = '学生'
    console.log(arr);
</script>

image-20220924190936242

但是虽然新增了键值对,但是并不算作数组长度,数组长度还是不变

3️⃣使用push追加元素

使用push()追加元素会在数组的末尾进行追加:

<script>
    var arr = [10,'哈哈',null];
    arr.push('hello');
    arr.push('兔总裁');
    console.log(arr);
</script>

image-20220924191338594

删除数组元素

使用splice()函数删除元素:

<script>
    var arr = [10,'哈哈',null];
    arr.push('hello');
    arr.push('兔总裁');
    // 从1下标开始,删除三个元素
    arr.splice(1,3);
    console.log(arr);
</script>

使用splice()替换元素:

<script>
    var arr = [10,'哈哈',null];
    arr.push('hello');
    arr.push('兔总裁');
    // 从1下标开始,删除一个元素,并且将娃哈哈和农夫山泉从下标1处依次插入
    arr.splice(1,1,'娃哈哈','农夫山泉');
    console.log(arr);
</script>

函数

定义函数

<script>
    function add(x,y){
        return x+y;
    }
    let ret = add(10,30);
    console.log(ret);
</script>

使用function关键字定义一个函数,和java区别:

  • 不用指明返回值类型,也就是返回什么类型都可以
  • 形参不用指明类型,所以什么类型的数据都可以传入

函数的定义和调用的先后顺序没有要求。

对于上面的add()函数,要求传入两个参数

  • 如果传入的参数个数多于2,则多出的参数不参与运算
  • 如果传入的参数个数少于2,则多出的形参为undefined

如果要想设计一个函数,对于传入的N个实参都可以作求和运算,函数怎么设计:

<script>
    function add(){
        let sum = 0;
        for(let i=0;i<arguments.length;i++){
            arguments[i] = arguments[i] || 0;
            sum+=arguments[i];
        }
        return sum;
    }
    let ret = add(10,30,50,undefined);
    console.log(ret);
</script>

在JS的函数中会内置一个形参数组,从形参数组中取出形参,然后累加,返回,就可以计算N个数值相加。

arguments[i] || 0 :|| 左边运算数如果是true,则该表达式返回第一个运算数,如果左边运算数是false,则该表达式返回右边运算数,另外undefined和null也看作false,所以如果传入的是一个undefined或者null,则会转换为0再相加。

使用函数表达式定义函数:

<script>
    var add = function(x,y){
        return x+y;
    }
    let ret = add(10,30);
    console.log(ret);
</script>

实际上是把一个匿名函数初始化给一个变量了,这个变量就代指这个函数,后续就可以使用这个变量调用方法,这个变量add的类型是function

变量作用域

<script>
    // 全局变量
    var num1 = 100;
    var add = function(){
        //局部变量
        var num1 = 10;
        return num1;
    }
    let ret = add();
    console.log(ret);
</script>

局部变量的作用域是代码块内,全局变量的作用域是整个script标签,JS中同样也遵循局部变量优先的原则

另外函数也可以作为函数参数,函数返回值,函数还可以在函数中定义

对象

在JS中创建一个对象,并不需要先有一个类,JS中所有的对象,都是同一个类型:object

创建对象

<script>
    //创建一个对象
    let people = {
        //定义属性
        name : '蔡徐坤',
        age : 25,

        //定义方法
        sing : function(){
            console.log(this.name + '唱歌');
        },
        jump : function(){
            console.log(this.name + '跳');
        }
    }
    console.log(people.name+people.age);
    people.sing();
    people.jump();
    //添加属性
    people.id = 100;
    //添加方法
    people.rap = function(){
        console.log(this.name + 'rap');
    }
    //调用添加的方法
    people.rap();
</script>

此时创建的pepole对象类型就是object类型

对象中既可以定义属性,也可以定义方法,属性和方法都是键值对

并且,在JS中还可以动态的添加属性和方法,创建完对象后,还能再给对象添加属性和方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值