变量的定义--乐字节Java

变量

​ 变量即一个带名字的用来存储数据的内存空间,数据可以存储到变量中,也可以从变量中取出数据。

变量的声明

​ JavaScript是一种弱类型语言,在声明变量时不需要指明数据类型,直接用var修饰符进行声明。

​ 变量声明和赋值:

// 先声明再赋值
var a ;    
a = 10;
// 声明同时赋值
var b = 20;

变量的注意点

(1)若只声明而没有赋值,则该变量的值为undefined。

var box;
console.log(box);

(2)变量要有定义才能使用,若变量未声明就使用,JavaScript会报错,告诉你变量未定义。

console.log(box2);

(3)可以在同一条var命令中声明多个变量。

var a, b, c = 10;
console.log(a,b,c);

(4)若使用var重新声明一个已经存在的变量,是无效的。

var box = 10
var box;

(5)若使用var重新声明一个已经存在的变量且赋值,则会覆盖掉前面的值

var box = 10;
var box = 25;

(6)JavaScript是一种动态类型、弱类型语言,也就是说,变量的类型没有限制,可以赋予各种类型的值。

var box = 'hello world';
box = 10;

变量提升

​ JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升。

console.log(msg);
var msg = "so easy";

// 变量提升,相当于下面的代码
var msg;
console.log(msg);
msg = "so easy";

// 说明: 最后的结果是显示undefined,表示变量msg已声明,但还未赋值。

​ 注意:变量提升只对 var 命令声明的变量有效,如果变量不是用 var 命令声明的,就不会发生变量提升。

console.log(msg);
msg = "error";

数据类型

​ 虽说JS是弱类型语言,变量没有类型,但数据本身是有类型的。针对不同的类型,我们可以进行不同的操作。

​ JavaScript 中有6 种数据类型,其中有五种简单的数据类型:UndefinedNull布尔数值字符串。一种复杂数据类型Object

数  值(Number): 整数和小数(比如 1 和 3.14)
字符串(String): 字符组成的文本(比如"Hello World")
布尔值(Boolean):true(真)和 false(假)两个特定值
Undefined:       表示“未定义”或不存在,即此处目前没有任何值
Null:            表示空缺,即此处应该有一个值,但目前为空
对象(object)(引用) : 各种值组成的集合
    1)、对象(object){name:”zhangsan”,age:”18”}
    2)、数组(array)[1,2,3]
    3)、函数(function)function test() {}

undefined

​ undefined类型的值是undefined。

​ undefined 是一个表示"无"的原始值,表示值不存在。

​ 出现undefined的常见情况:

​ (1)当声明了一个变量而没有初始化时,这个变量的值就是undefined

var box;
console.log(box); //undefined

​ (2)调用函数时,该函数有形参,但未提供实参,则该参数为undefined。

function noData(str) { // js函数形参只需要变量名即可
    console.log(str); // undefined
}
noData(); // 调用方法时,未传递参数

​ (3)函数没有返回值时,默认返回 undefined。

// 方法没有返回值
function noData() { 
    console.log("Hello"); 
}
var re = noData();// 定义变量接收无返回值的方法
console.log(re);

null

​ null类型是只有一个值的数据类型,即特殊的值null。它表示空值,即该处的值现在为空,它表示一个空对象引用。

​ 使用Null类型值时注意以下几点:

​ 1)使用typeof操作符测试null返回object字符串。

​ 2)undefined派生自null,所以等值比较返回值是true。未初始化的变量和赋值为null的变量相等。

console.log(undefined == null);
var box = null; // 赋值为null的变量
var a; // 未初始化的变量
console.log(a == box);    // 两个的值相等    

布尔类型

​ 布尔类型有两个值:true、false。常用来做判断和循环的条件

数值型

​ 数值型包含两种数值:整型和浮点型。

​ 1)所有数字(整型和浮点型)都是以 64 位浮点数形式储存。所以,JS中1 与 1.0 相等,而且 1 加上 1.0 得到的还是一个整数。浮点数最高精度是17位小数,由于浮点数运算时可能不精确,尽量不要使用浮点数做判断。

​ 2)在存储数值型数据时自动将可以转换为整型的浮点数值转为整型。

console.log(1 == 1.0); // true
console.log(1 + 1.0); // 2
var num = 8.0; // 自动将可以转换为整型的浮点数转为整型
console.log(num); // 8

字符串

​ 使用 ' ' 或 " "引起来,如:'hello',"good"。

​ 使用加号 '+' 进行字符串的拼接,如:console.log('hello' + ' everybody');

对象

​ 对象是一组数据和功能的集合。

​ 说明:

​ {}:表示使用对象字面量方式定义的对象。空的大括号表示定义包含默认属性和方法的对象。

类型转换

自动类型转换

[1sdfgh8cde9.png

1gh87666.png

函数转换(String to Number)

​ JS 提供了 parseInt()parseFloat()两个全局转换函数。前者把值转换成整数,后者把值转换成浮点数。只有对 String 类型调用这些方法,这两个函数才能正确运行;对其他类型返回的都是 NaN(Not a Number)。

parseInt()

​ 在转换之前,首先会分析该字符串,判断位置为0处的字符,判断它是否是个有效数字,如果不是,则直接返回NaN,不再继续,如果是则继续,直到找到非字符

 parseInt("1234blue"); // returns 1234
 parseInt("22.5"); // returns 22
 parseInt("blue"); // returns NaN
parseFloat()

​ 该方法与 parseInt() 方法的处理方式相似,从位置 0 开始查看每个字符,直到找到第一个非有效的字符为止,然后把该字 符之前的字符串转换成数字。不过,对于这个方法来说,第一个出现的小数点是有效字符。如果有两个小数点,第二个小数点将被看作无效的,parseFloat()方法会把这个小数点之前的字符串转换成数字。

parseFloat("1234blue"); // returns 1234.0
parseFloat("22.5"); // returns 22.5
parseFloat("22.34.5"); // returns 22.34
parseFloat("blue"); //returns NaN

显示转换

​ 几乎每个数对象都提供了toString()函数将内容转换为字符串形式,其中Number提供的toString()函数可以将数字转换为字符串。

​ Number还提供了toFixed()函数将根据小数点后指定位数将数字转为字符串,四舍五入

// 将内容转换为字符串形式
var data = 10
console.log(data.toString())

// 根据小数点后指定位数将数字转为字符串,四舍五入
data = 1.4;
console.log(data.toFixed(0));
data = 1.49;
console.log(data.toFixed(1));

            
// 不能对null和undefined使用
data = null
console.log(data.toString())
data = undefined
console.log(data.toString())

​ JS 为 Number、Boolean、String 对象提供了构造方法,用于强制转换其他类型的数据。此时操作的是整个数据,而不是部分。

Number(false)            0
Number(true)             1
Number(undefined)          NaN
Number(null)             0
Number( "5.5 ")         5.5
Number( "56 ")          56
Number( "5.6.7 ")       NaN
Number(new Object())    NaN
Number(100)             100

Boolean("");             // false – empty string
Boolean("hi");             // true – non-empty string
Boolean(100);             // true – non-zero number
Boolean(null);             // false - null
Boolean(0);             // false - zero
Boolean(new Object());     // true – object

​ 最后一种强制类型转换方法 String() 是最简单的,因为它可把任何值转换成字符串。要执行这种强制类型转换,只需要调用作为参数传递进来的值的 toString() 方法,即把 1 转换成"1 ",把 true转换成 "true ",把 false 转换成 "false ",依此类推。强制转换成字符串和调用 toString() 方法的唯一不同之处在于,对 null 或 undefined 值强制类型转换可以生成字符串而不引发错误:

var s1 = String(null); // "null"
var oNull = null;
var s2 = oNull.toString(); // won’t work, causes anerror

​ 最为简单的一种转换为字符串的方式,直接在任意数据后面 + "" 即可。

运算符

​ 运算符用于执行程序代码运算,会针对一个及其以上操作数来进行运算。

算数运算符

运算符 描述 例子 结果
+ x=y+2 x=7
- x=y-2 x=3
* x=y*2 x=10
/ x=y/2 x=2.5
% 求余数 x=y%2 x=1
++ 自增(前导加、后导加) x=++y x=6
-- 自减(前导减、后导减) x=--y x=4

赋值和扩展运算符

运算符 例子 等价于 结果
= x=y x=5
+= x+=y x=x+y x=15
-= x-=y x=x-y x=5
*= x*=y x=x*y x=50
/= x/=y x=x/y x=2
%= x%=y x=x%y x=0

比较运算符

运算符 描述 例子
== 等于 x==8 为 false
=== 全等(值和类型) x===5 为 true;x==="5" 为 false
!= 不等于 x!=8 为 true
> 大于 x>8 为 false
< 小于 x<8 为 true
>= 大于或等于 x>=8 为 false
<= 小于或等于 x<=8 为 true

逻辑运算符

运算符 描述 例子
&& and (x < 10 && y > 1) 为 true
\ \ or (x==5 \ \ y==5) 为 false
! not !(x==y) 为 true

三目运算符

运算符 描述 例子
?: 如果…否则… 3>5?3:5

控制语句

​ 我们写的 JavaScript 代码都是按照从上到下依次执行,很多时候我们希望代码按照我们的意愿去执行,比如有选择性地执行某些代码,或者重复地执行某些代码,这就需要使用到流程控制语句。

​ 流程控制语句一共有三种:

​ 1. 流程执行:从上到下,从左到右

​ 2. 选择执行:分支选择

​ 3. 循环执行:重复执行

选择

单选择
if (条件){
    语句体;
}

​ 首先执行条件

​ 如果结果为true,则执行语句体;

​ 如果结果为false,则结束if语句。

​ 注意:若语句体只有一条语句,可以省略大括号,但不建议省略

双选择
if (条件){
    语句体1;
}else {
    语句体2;
}

​ 首先执行条件

​ 如果结果为true,则执行语句体1;

​ 如果结果为false,则执行语句体2。

多选择
if(比较表达式1) {
    语句体1;
}else if(比较表达式2){
    语句体2;
}else if(比较表达式3){
    语句体3;
}
    ...
[else {
    语句体n+1;
}]
switch结构

​ 多个 if ...else 且值为定值时(即=== 在比较运行结果时,采用的是严格相等运算符(===),而不是相等运算符(==),这意味着比较时不会发生类型转换。) ,可以使用 switch 替换:

switch(表达式) {
    case 值1:
        语句体1;
        break;
    case 值2:
        语句体2;
        break;
    ...
    default:
        语句体n+1;
        [break;]
}

​ break 防止穿透,如果没有 break,则继续执行后面的代码,直到遇到 break 或全部执行完毕,但是有些时候会利用穿透。

循环

​ 循环结构用于重复执行某个操作 简单理解就是重复执行同类型的代码,它有多种形式。

while

​ 先判断后执行

基本格式
    while(判断条件语句) {
        循环体语句;
    }
            
扩展格式:
    初始化语句;
    while(判断条件语句){
        循环体语句;
        控制条件语句;    //   少了它很容易形成死循环
    }
do...while

​ 先执行后判断,至少执行一次

基本格式
    do {
        循环体语句;
    }while(判断条件语句);
    
扩展格式:
    初始化语句;
    do {
        循环体语句;
        控制条件语句;
    } while(判断条件语句);
for
for(初始化语句;判断条件语句;控制条件语句){
    循环体语句;
}
死循环

​ 条件永远成立,永远为 true,则会产生死循环,下面是最简单的死循环

while(true){}
for(;;){}
break 与 continue

​ break: 停止本层循环

​ continue:暂停本次循环,继续下一次

阅读 90

推荐阅读