> 文档中心 > Web前端 | JavaScript(变量和数据类型)

Web前端 | JavaScript(变量和数据类型)


✅作者简介:一位材料转码农的选手,希望一起努力,一起进步!

📃个人主页:@每天都要敲代码的个人主页

🔥系列专栏:Web前端

💬推荐一款模拟面试、刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习

目录

一:变量

1. 变量的声明与赋值

1.1 Java中的变量

1.2 JS中的变量

2. 函数的定义与调用

3. 局部变量和全局变量

二:数据类型

1. Undefined数据类型

2. Number数据类型

3. Boolean数据类型

4. Null数据类型

5. String数据类型

6. Object数据类型

7. null NaN  undefined三者的区别 

结束语


一:变量

1. 变量的声明与赋值

1.1 Java中的变量

(1)java中怎么定义/声明变量?
          数据类型 变量名;
          例如:                       

int i;double d;boolean flag;

(2)java中的变量怎么赋值?
         使用“=”运算符进行赋值运算。

        ("="运算符右边先执行,将右边执行的结果赋值给左边的变量。)
          变量名 = 值;例如:                   

       i = 10;       d = 3.14;       flag = false;

(3)java语言是一种强类型语言,强类型怎么理解?
         java语言存在编译阶段,假设有代码:int i;那么在Java中有一个特点是:java程序编译阶段就已经确定了i变量的数据类型,该i变量的数据类型在编译阶段是int类型,那么这个变量到最终内存释放,一直都是int类型,不可能变成其他类型!
          int i = 10; double d = i; 这行代码是说声明一个新的变量d,double类型,把i变量中保存的值传给d;i还是int类型。i = "abc"; 这行代码编译的时候会报错,因为i变量的数据类型是int类型,不能将字符串赋给i!
           java中要求变量声明的时候是什么类型,以后永远都是这种类型,不可变。编译期强行固定变量的数据类型。称为强类型语言。

1.2 JS中的变量

(1)javascript怎么声明变量?
                        var 变量名;
                    怎么给变量赋值?
                        变量名 = 值;
(2)javascript是一种弱类型语言没有编译阶段,一个变量可以随意赋值,赋什么类型的值都行。          

var i = 100;i = "abc";i = new Object();i = 3.14;

(3)在JS当中,当一个变量没有手动赋值的时候,系统默认赋值undefined

// 在JS当中,当一个变量没有手动赋值的时候,系统默认赋值undefined// undefined 在JS中是一个具体存在值var i;alert("i = "+i);// i = undefined// 可以给变量赋值为undefinedvar k = undefined;alert("k = "+k);// 一个变量没有声明/定义,直接访问// F12调试显示报错:age is not defined// alert(age);var a,b,c=200;alert("a = "+a); // a = undefinedalert("b = "+b); // b = undefinedalert("c = "+c); // c = 200// 重新给a进行赋值a = 3.14;alert("a = "+a); // a = 3.14a = false;alert("a = "+a); // a = falsea = "abc";alert("a = "+a); // a = abc

2. 函数的定义与调用

(1)JS中的函数:
          等同于java语言中的方法,函数也是一段可以被重复利用的代码片段;函数一般都是可以完成某个特定功能的。
(2)回顾java中的方法
         [修饰符列表] 返回值类型 方法名(形式参数列表){
                 方法体;
         }
         例如:             

// 函数的定义public static boolean login(String username,String password){    ...     return true;}// 函数的调用boolean loginSuccess = login("admin","123");

(3)JS中的变量是一种弱类型的,那么函数应该怎么定义呢?
         语法格式:
                        第一种方式:
                            function 函数名(形式参数列表){
                                函数体;
                            }

                        第二种方式:
                            函数名 = function(形式参数列表){
                                函数体;
                            }

(4)JS中的函数不需要指定返回值类型,返回什么类型都行;参数也不需要写参数类型                                

// 定义一个sum函数function sum(x,y){// x和y都是局部变量,都是形参(x和y都是变量名,变量名随意)alert(x+y);}// 调用函数// sum(10,20); // 30// 定义函数sayHellosayHello=function(username){alert("Hello "+username);}// 调用函数// sayHello("zhangsan"); //Hello zhangsan 

(1)Js中的函数没有重载机制,因为是弱类型;JS当中的函数在调用的时候,参数的类型没有限制,并且参数的个数也没有限制;一个函数就相当于很多函数

(2)在JS当中,函数的名字不能重名,当函数重名的时候,后声明的函数会将之前声明的同名函数覆盖!

(3)JS中就只通过函数名来区分函数!

// 1、定义一个两个参数的sum函数sum=function(x,y){return x+y;}// 1.1正常调用函数,就传2个参数var retValue = sum(10,20);alert(retValue); // 30// 1.2传一个参数,一个字符串// abc赋值给a变量,b变量没有赋值系统默认赋值undefinedalert(sum("jack")); //jackundefined// 1.3传三个参数// 第三个参数会被舍弃掉alert(sum(1,2,3)) // 3// 1.4不传参数// NaN是一个具体存在的值,该值表示不是数字;Not a Numberalert(sum()); //NaN// 2、在定义一个重名的函数function test(username){alert("test test");}function test(){alert("test"); // 执行这个结果test}// 调用,调用的是第二个test()函数// 因为后声明的函数会将之前声明的同名函数覆盖test("zhangsan");

3. 局部变量和全局变量

(1)全局变量:在函数体之外声明的变量属于全局变量,全局变量的生命周期是:
浏览器打开时声明,浏览器关闭时销毁,尽量少用。因为全局变量会一直在浏览器的内存当中,耗费内存空间。能使用局部变量尽量使用局部变量。
(2)局部变量:在函数体当中声明的变量,包括一个函数的形参都属于局部变量,局部变量的生命周期是:函数开始执行时局部变量的内存空间开辟,函数执行结束之后,局部变量的内存空间释放。局部变量生命周期较短

(3)当一个变量声明的时候没有使用var关键字,那么不管这个变量是在哪里声明的,都是全局变量

// 1、定义全局变量var i = 100;function accessI(){// 访问的是全局变量alert("i = "+i); // i = 100}accessI();// 2、局部变量var username = "zhangsan"; // 全局变量function accessUsername(){// 定义局部变量var username = "lisi";// 就近原则:访问的是局部变量alert("username = "+username); // username = lisi}// 调用函数accessUsername();// 访问的是全局变量alert("username = "+username); // username = zhangsan// 3、 当一个变量声明的时候没有使用var关键字,那么不管这个变量是在哪里声明的,都是全局变量function myfun(){ // 在函数里面声明的变量,没有用var修饰,实际上是全局变量myname="wangwu"; }// 在函数外能访问到,需要先调用这个函数才能够去访问myfun();alert("myname = " +myname); // username = wangwu

二:数据类型

(1)虽然JS中的变量在声明的时候不需要指定数据类型,但是在赋值,每一个数据还是有类型的,所以我们也需要学习一下JS包括哪些数据类型
         JS中数据类型分为:原始类型、引用类型!
              原始类型:Undefined、Number、String、Boolean、Null
             
引用类型:Object以及Object的子类
(2)ES规范(ECMAScript规范),在ES6之后,又基于以上的6种类型之外添加了一种新的类型:Symbol
(3)JS中有一个运算符typeof,可以在程序的运行阶段动态的获取变量的数据类型
         typeof运算符的语法格式:typeof 变量名
         typeof运算符的运算结果是以下6个字符串之一:注意字符串都是全部小写!
         "undefined"、"number"、"string"、"boolean"、"object"、"function"
(4)在JS当中比较字符串是否相等使用“==”完成!没有equals方法。

// 求和,要求a变量和b变量将来的数据类型必须是数字,不能是其他类型function sum(x,y){// 相当于限制条件if(typeof x == "number" && typeof y == "number"){return x+y;}alert(x+","+ y +"必须都是数字!");}var retValue = sum(false,"abc");// 传参不传数字,会执行alert,没有返回值,系统默认会给retValue赋一个unfinedalert(retValue); // "undefined"alert(sum(1,2)); // 3// 其它值类型var i;alert(typeof i); // "undefined"var k = 10;alert(typeof k); // "number"var f = "abc";alert(typeof f); // "string"var d = null;// null属于Null类型,但是typeof运算符的结果是"object"alert(typeof d); // "object"var flag = false;alert(typeof flag); // "boolean"var obj = new Object();alert(typeof obj); // "Object"function sayHello(){}alert(typeof sayHello) // "function"

1. Undefined数据类型

Undefined类型只有一个值,这个值就是 undefined,当一个变量没有手动赋值,系统默认赋值undefined或者也可以给一个变量手动赋值undefined

var i;alert(typeof i); // undefinedvar k = undefined;alert(typeof k); // undefinedalert(i==k); // truevar y = "undefined"; // stringalert(typeof y);alert(k==y); // false

2. Number数据类型

(1)Number类型包括哪些值?
         -1 0 1 2 2.3 3.14 100 .... NaN Infinity
         整数、小数、正数、负数、不是数字、无穷大都属于Number类型。

         NaN (表示Not a Number,不是一个数字,但属于Number类型

         Infinity (当除数为0的时候,结果为无穷大)
(2)isNaN()函数 : 结果是true表示不是一个数字,结果是false表示是一个数字。
(3)parseInt()函数,可以将字符串自动转换成数字,并且取整数位
(4)parseFloat()函数,可以将字符串自动转换成数字
(5)Math.ceil() 函数(Math是数学类,数学类当中有一个函数叫做ceil(),作用是向上取整)

   var v1 = 1;   var v2 = 3.14;   var v3 = -100;   var v4 = NaN;   var v5 = Infinity;   // 运行结果都是"number"   alert(typeof v1);   alert(typeof v2);   alert(typeof v3);   alert(typeof v4);   alert(typeof v5);// 什么情况下结果是一个NaN呢?    // 运算结果本来应该是一个数字,最后算完不是一个数字的时候,结果是NaN.var a = 10;var b = "abc";// 除号显然最后结果应该是一个数字,但是运算的过程中导致最后不是一个数字,那么最后的结果是NaNalert(a / b); // NaN// + 运行结果不一定是一个数字,也有可能是字符串拼接alert(a + b); // 10abc// Infinity (当除数为0的时候,结果为无穷大) alert(10 / 0); // Infinity  // 在JS中 10 / 3结果会保留小数,不会取整是3 alert(10 / 3); // 3.3333333333333   // 几个函数讲解  //1. isNaN: is Not a Number  // 用法:isNaN(数据) ,结果是true表示不是一个数字, 结果是false表示是一个数字 // 求和,要求a变量和b变量将来的数据类型必须是数字,不能是其他类型 function sum(x,y){ // 方法1 if(typeof x == "number" && typeof y == "number"){ alert(x+y); } alert("两个参数必须都是数字!")  // 方法2:使用isNaN函数 if(isNaN(x) || isNaN(y)){ alert("两个参数必须都是数字!"); return; } alert(x+y);  } sum(10,"abc");  //2. parseInt():可以将字符串自动转换成数字,并且取整数位 alert(parseInt("3.9999")); // 3 alert(parseInt(2.9999)); // 2//3. parseFloat():可以将字符串自动转换成数字,并还可以进行运算alert(parseFloat("3.14"+1)); // 4.14 //4. Math.ceil()向上取整 alert(Math.ceil(2.2)); // 3

3. Boolean数据类型

(1)JS中的布尔类型永远都只有两个值:true和false (这一点和java相同)
 (2)在Boolean类型中有一个函数叫做:Boolean()
          语法格式: Boolean(数据) 
          Boolean()函数的作用是将非布尔类型转换成布尔类型。

          但是使用if,while等里面传数据,会自动调用Boolean()函数进行转换!

var username="jack";// 会自动调用Boolean(username)转换为boolean类型// 因为if语句后面只能跟true或falseif(username){alert("欢迎回来"+username); // 欢迎回来jack}else{alert("用户名不能为空!");}// 探究那些转换为true,那些转换为falsealert(Boolean(1)); // truealert(Boolean(0)); // falsealert(Boolean("")); // falsealert(Boolean("abc")); // truealert(Boolean(null)); // falsealert(Boolean(NaN)); // falsealert(Boolean(undefined)); // falsealert(Boolean(Infinity)); // truewhile(10 / 3){ // Boolean函数转换为true,是一个死循环alert("hehe"); }

4. Null数据类型

Null类型只有一个值: null, 但是typeof的值是一个object

alert(typeof null); // object

5. String数据类型

(1)在JS当中字符串可以使用单引号,也可以使用双引号。
            var s1 = 'abcdef';
            var s2 = "test";
(2)在JS当中,怎么创建字符串对象的两种方式:
            第一种:var s = "abc";

                         是string类型,小string(属于原始类型String)
            第二种(使用JS内置的支持类String): var s2 = new String("abc");

                        是Object类型,大String(属于Object引用类型)
            需要注意的是:String是一个内置的类,可以直接用,String的父类是Object。
(3)无论小string还是大String,他们的属性和函数都是通用的!
(4)关于String类型的常用属性和函数?
            常用属性:
                            length 获取字符串长度
            常用函数:
                            indexOf                 获取指定字符串在当前字符串中第一次出现处的索引
                            lastIndexOf           获取指定字符串在当前字符串中最后一次出现处的索引
                            replace                 替换
                            substr                   截取子字符串
                            substring              截取子字符串
                            toLowerCase       转换小写
                            toUpperCase       转换大写
                            split                      拆分字符串

(5)重点:substr(2,4)和substring(2,4)的区别

        substr(startIndex, length) 第一个参数是下标;第二个参数是长度,往后面数几个元素

        substring(startIndex, endIndex) 第一个参数是起始下标;第二个参数是结束下标;

        不包含结束下标endIndex;所以substr(2,4)是4个元素,substring(2,4)是2个元素

   // 小string(属于原始类型String)var x = "abcd";alert(typeof x); // "string"// 大String(属于Object引用类型)var y = new String("abc");alert(typeof y); // "Object"   // 获取字符串的长度   alert(x.length); // 4   alert(y.length); // 3      // indexOf获取指定字符串在当前字符串   alert("http://www.baidu.com".indexOf("http")); // 0   alert("http://www.baidu.com".indexOf("https")); // -1      // lastIndexOf获取指定字符串在当前字符串中最后一次出现处的索引   alert("http://www.baidu.www.com".lastIndexOf("www")); // 17      // replace替换(注意:只替换了第一个); 想全部替换需要使用正则表达式   // name=value&name=value#name=value   alert("name=value#name=value#name=value".replace("#","&"));      // substr截取子字符串   // substr(startIndex, length)   alert("abcdef".substr(2,4)); // cdef   // substring截取子字符串   // substring(startIndex, endIndex) 注意:不包含endIndex   alert("abcdef".substring(2,4)); // cd      // toLowerCase  转换小写   alert("AaBc".toLowerCase()); //aabb      // toUpperCase转换大写   alert("AaBc".toUpperCase()); // AABB      // split 拆分字符串   alert("192.168.2.128".split(".")); // 192,168,2,128   

6. Object数据类型

(1)Object类型是所有类型的超类,自定义的任何类型,默认继承Object。
(2)Object类包括哪些属性?
                  prototype属性(很重要):作用是给类动态的扩展属性和函数。
                  constructor属性

(3)Object类包括哪些函数?
                        toString()
                        valueOf()
                        toLocaleString()

(4)在JS当中定义的类默认继承Object,会继承Object类中所有的属性以及函数。
(5)在JS当中怎么定义类(和函数一样)?怎么new对象?
                 第一种方式:
                         function 类名(形参){                                    
                                }

                 第二种方式:
                          类名 = function(形参){        
                                }

                 创建对象的语法:
                          new 构造方法名(实参);  构造方法名和类名一致

function sum(x,y){alert(x+y);}// 当做普通函数调用sum(10,20); // 30// 当做类类创建对象var obj = new sum(10,10); //20// obj是一个引用,保存内存地址指向堆中的对象   alert(obj); //  [object Object] // JS中的类的定义,同时又是一个构造函数的定义     // 在JS中类的定义和构造函数的定义是放在一起来完成的  function User(sno, sname, sage){ // a b c是形参,属于局部变量   // 声明属性 (this表示当前对象)   // User类中有三个属性:sno/sname/sage   this.sno = sno;   this.sname = sname;   this.sage = sage;  }    // 创建对象   var u1 = new User(111,"zhangsan",30);   // 访问对象的属性   alert(u1.sno);   alert(u1.sname);   alert(u1.sage);      // 访问一个对象的属性,还可以使用这种语法   alert(u1["sno"]);   alert(u1["sname"]);   alert(u1["sage"]);  Product = function(pno,pname,price){   // 属性   this.pno = pno;   this.pname=pname;   this.price=price;   // 在类中定义函数   this.getPrice = function(){   return this.price;   }   }   // 创建对象,并调用   var pro = new Product(111,"香蕉",3.0);   var price = pro.getPrice();   alert(price); // 3.0      // 可以通过prototype这个属性来给类动态扩展属性以及函数   // 函数   Product.prototype.getPname  = function(){   return this.pname;   }    // 调用后期扩展的getPname()函数   var pname = pro.getPname();   alert(pname); // 香蕉      // 给String扩展一个函数   String.prototype.zl = function(){   alert("这是给String类型扩展的一个函数");   }   // 随便一个字符串都能调用   "abc".zl(); // 这是给String类型扩展的一个函数

补充:Java和JS创建对象对比

java语言怎么定义类,怎么创建对象?(强类型)       

 public class User{            private String username;            private String password;            public User(){                            }            public User(String username,String password){                this.username = username;                this.password = password;            }        }        User user = new User();        User user = new User("lisi","123");

JS语言怎么定义类,怎么创建对象?(弱类型)       

 User = function(username,password){            this.username = username;            this.password = password;        }        var u = new User();        var u = new User("zhangsan");        var u = new User("zhangsan","123");

7. null NaN  undefined三者的区别 

// null NaN undefined三者的区别alert(typeof null); // "object"alert(typeof NaN); // "number"alert(typeof undefined); // "undefined"// null和undefined可以等同// ==(等同运算符,只判断值是否相等)alert(null == NaN); // falsealert(null == undefined); // truealert(NaN == undefined); // false// ===(全等运算符,即判断值是否相等,又判断数据类型是否相等)alert(null === NaN); // falsealert(null === undefined); // falsealert(NaN === undefined); // false// 思考alert(1 == true); // truealert(1 === true); //false

结束语

今天的分享就到这里啦!快快通过下方链接注册加入刷题大军吧!

各种大厂面试真题在等你哦!
💬刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习