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
结束语
今天的分享就到这里啦!快快通过下方链接注册加入刷题大军吧!
各种大厂面试真题在等你哦!
💬刷题神器,从基础到大厂面试题👉点击跳转刷题网站进行注册学习