0


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

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

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

🔥系列专栏:Web前端

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

一:变量

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

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

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中的函数不需要指定返回值类型,返回什么类型都行;参数也不需要写参数类型

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
        // 定义一个sum函数
        function sum(x,y){
            // x和y都是局部变量,都是形参(x和y都是变量名,变量名随意)
            alert(x+y);
        }
        // 调用函数
        // sum(10,20); // 30
        
        // 定义函数sayHello
        sayHello=function(username){
            alert("Hello "+username);
        }
        // 调用函数
        // sayHello("zhangsan"); //Hello zhangsan
        
        </script>
        <!--在外面定义按钮,点击才调用函数,需要用到事件句柄onclick-->
        <!--window.alert()也是一个内置函数,现在只不过换成我们自己写的函数-->
        <input type="button" value="Hello"  onclick="sayHello('jack')"></input>
        
    </body>
</html>

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

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

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

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            // 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变量没有赋值系统默认赋值undefined
            alert(sum("jack")); //jackundefined
            
            // 1.3传三个参数
            // 第三个参数会被舍弃掉
            alert(sum(1,2,3)) // 3
            
            // 1.4不传参数
            // NaN是一个具体存在的值,该值表示不是数字;Not a Number
            alert(sum()); //NaN
            
            // 2、在定义一个重名的函数
            function test(username){
                alert("test test");
            }
            
            function test(){
                alert("test"); // 执行这个结果test
            }
            // 调用,调用的是第二个test()函数
            // 因为后声明的函数会将之前声明的同名函数覆盖
            test("zhangsan");
        </script>
    </body>
</html>

3. 局部变量和全局变量

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

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

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            // 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
            
        </script>
    </body>
</html>

二:数据类型

(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方法。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            // 求和,要求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赋一个unfined
            alert(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"
            
            
        </script>
    </body>
</html>

1. Undefined数据类型

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

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            var i;
            alert(typeof i); // undefined
            var k = undefined;
            alert(typeof k); // undefined
            
            alert(i==k); // true
            
            var y = "undefined"; // string
            alert(typeof y);
            
            alert(k==y); // false
        </script>
    </body>
</html>

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(),作用是向上取整)

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
           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";
            // 除号显然最后结果应该是一个数字,但是运算的过程中导致最后不是一个数字,那么最后的结果是NaN
            alert(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
            
        </script>
    </body>
</html>

3. Boolean数据类型

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

      但是使用if,while等里面传数据,会自动调用Boolean()函数进行转换!
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            var username="jack";
            // 会自动调用Boolean(username)转换为boolean类型
            // 因为if语句后面只能跟true或false
            if(username){
                alert("欢迎回来"+username); // 欢迎回来jack
            }else{
                alert("用户名不能为空!");
            }
            
            // 探究那些转换为true,那些转换为false
            alert(Boolean(1)); // true
            alert(Boolean(0)); // false
            alert(Boolean("")); // false
            alert(Boolean("abc")); // true
            alert(Boolean(null)); // false
            alert(Boolean(NaN)); // false
            alert(Boolean(undefined)); // false
            alert(Boolean(Infinity)); // true
            
            while(10 / 3){ 
                // Boolean函数转换为true,是一个死循环
                alert("hehe"); 
            }
        </script>
    </body>
</html>

4. Null数据类型

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

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            alert(typeof null); // object
        </script>
    </body>
</html>

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个元素
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
           // 小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
           
        </script>
    </body>
</html>

6. Object数据类型

(1)Object类型是所有类型的超类,自定义的任何类型,默认继承Object。
(2)Object类包括哪些属性?
** prototype属性**(很重要):作用是给类动态的扩展属性和函数。
constructor属性
(3)Object类包括哪些函数?
toString()
valueOf()
toLocaleString()
(4)在JS当中定义的类默认继承Object,会继承Object类中所有的属性以及函数。
(5)在JS当中怎么定义类(和函数一样)?怎么new对象?
第一种方式:
function 类名(形参){
}
第二种方式:
类名 = function(形参){
}
创建对象的语法:
new 构造方法名(实参); 构造方法名和类名一致

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type="text/javascript">
            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类型扩展的一个函数
            
        </script>
    </body>
</html>

补充: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三者的区别

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
    </head>
    <body>
        <script type = "text/javascript">
            // null NaN undefined三者的区别
            alert(typeof null); // "object"
            alert(typeof NaN); // "number"
            alert(typeof undefined); // "undefined"
            
            // null和undefined可以等同
            // ==(等同运算符,只判断值是否相等)
            alert(null == NaN); // false
            alert(null == undefined); // true
            alert(NaN == undefined); // false
            
            // ===(全等运算符,即判断值是否相等,又判断数据类型是否相等)
            alert(null === NaN); // false
            alert(null === undefined); // false
            alert(NaN === undefined); // false
            
            // 思考
            alert(1 == true); // true
            alert(1 === true); //false
        </script>
        
    </body>
</html>

结束语

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

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

标签: javascript 前端 java

本文转载自: https://blog.csdn.net/m0_61933976/article/details/126658161
版权归原作者 @每天都要敲代码 所有, 如有侵权,请联系我们删除。

“Web前端 | JavaScript(变量和数据类型)”的评论:

还没有评论