2.变量
1)什么是变量?
在计算机中,可以通过一些符号表示一些数据,这个符号就是变量(所谓变量,就是可以初始化后可以再次改变的量)。
2)如何定义一个变量?
变量需要定义才能使用。
var 变量名 = 值;
Js是弱类型语言,定义变量时无须指定类型。
控制台调试工具: F12 -> console(控制台)
代码中: console.log(“我们”);
变量可以重复赋值,但不能重复定义。
3)变量名的命名规范
A, 第一个字符不能是数字
B, 变量名可以由字母,数字,下划线和$组成
C,不能使用关键字和保留字。
关键字:
JavaScript描述了一组具有特定用途的关键字,一般用于控制语句的开始或结束, 或者用于执行特定的操作等。关键字也是语言保留的,不能用作标识符
保留字:JavaScript还描述了另一组不能用作标识符的保留字。尽管保留字在 JavaScript 中还没有特定的用途,但它们很有可能在将来被用作关键字
4)区分大小写
3.变量的数据类型
(1)虽然js是弱类型语言(定义时无须指定类型),但事实上变量有自己的类型(变量类型取决于值)。
(2)JavaScript数据类型分为两大类:
简单(基本)数据类型:undefined、null、boolean、number 和 string
引用类型:常见引用类型 Date、Array、Function、RegExp、Object
注意:Date、Array、Function、RegExp都归属与Object类型
(3)变量拥有动态的数据类型
var a=10;//number
a=‘hello’;//string
(4)变量数据类型检测
typeof 变量名;
注意:
1.我们没有必要显式的给一个变量赋值为 undefined,因为没有赋值的变量会隐式的(自动的)赋值为 undefined
2.undefined 是派生自 null
3. typeof 操作符检测 null 会返回 object。
4.NaN,即非数值(Not a Number)是一个特殊的值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)
5.NaN的数据类型为 number
数据类型详解
(1)undefined类型
undefined 类型只有一个值,即特殊的 undefined。在使用 var 声明变量,但没有对其初 始化时,这个变量的值就是 undefined
例如:var a;
console.log(a);//undefined
(2)null类型
null 类型是一个只有一个值的数据类型,即特殊的值 null。它表示一个空对象引用(指 针),而 typeof 操作符检测 null 会返回 object。
(3)boolean类型
boolean 类型有两个值(字面量):true 和 false。
(4)number类型
number 类型包含两种数值:整型和浮点型。
例如:
var a=10;//整型10
var b=10.1;//浮点型10
注意:JavaScript支持科学计数法:
例如:
var a=13000;var b=0.0035;
可以转换为:
var a=1.3e4;
var b=3.5-e3;
(5)string类型
string 类型用于表示由于零或多个字符组成的字符序列。字符串可以由双引号(")或单引号(')表示。
例如:
var a=‘hello’;
var b=‘’;//空字符串
var c=“hello world”;
注意:字符串中可以包含任何内容,另外 字符串不管包含任何内容均为原样输出
数据类型转换
JavaScript 变量可以转换为新变量或其他数据类型
1.使用JavaScript函数
(1)其他类型转换为字符串类型
使用toString()方法即可
拼接””(空字符串)
(2)将字符串转换为数字:
parseFloat();//解析一个字符串,返回浮点数
parseInt();//解析一个字符串,返回整数
2.通过JavaScript自身自动转换
当 JavaScript 尝试操作一个 "错误" 的数据类型时,会自动转换为 "正确" 的数据类型。
例如:
3 + null // 返回 3 null 转换为 0
“3" + null // 返回“3null" null 转换为 "null"
“3" + 1 // 返回 “31" 1 转换为 "1"
“3" - 1 // 返回 2 “3" 转换为 3
注意:
(1)在特殊情况下,true与1,false与0之间 可以互相转换
(2)在特殊情况下(如判断语句中),null、undefined、’’、0均可以认为是 false,其他则为true
(3)parseInt(‘5abc’)的值为5,parseInt(‘abc5’)的值为NaN
4.变量值的传递
变量的赋值为值的传递
例如:
var a=10;
var b=a;// b=10 ,a=10
b=20;
console.log(a,b);//a=10,b=20
附加:多变量声明
var a,b,c;
var a=10,b=20,c=30;
5.变量提升现象
JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
例如:
a=20;//对变量a进行赋值
document.write(‘hello’);
console.log(a);//a的值为20
var a;//声明变量a
注意:变量的初始化不会提升
例如:
console.log(a);// undefined
var a=10;
赋值语句依然遵循顺序结构
6.运算符
算术运算符
+, -, /, %, ()
++, -- (自增,自减)
1)关系运算符
得到的结果是boolean值。 只有true 或false
>, <, >=, <=, ==, !=, ===, !==
2)逻辑运算符
得到的结果是boolean值。
&&, ||, ! (与或非)
&& 都真才真
|| 都假才假
! 取反 (非真就是假)
3)赋值运算符
=
注释:
(1)只能操作一个值的运算符叫做一元运算符。例如:++和--
(2)前置和后置的区:在没有赋值操作,前置和后置是一样的。但在赋值操作时,如果递增或递减运算符前置 ,那么前置的运算符会先累加或累减再赋值,如果是后置运算符则先赋值再累加或累减。
(3)关系运算符规则:
1.两个操作数都是数值,则数值比较;
2.两个操作数都是字符串,则比较两个字符串对应的字符编码值;
3.两个操作数有一个是数值,则将另一个转换为数值,再进行数值 比较;
在相等和不等的比较上,如果操作数是非数值,则遵循一下规则:
(1)一个操作数是布尔值,则比较之前将其转换为数值,false 转成 0,true 转成 1;
(2)一个操作数是字符串,则比较之前将其转成为数值再比较;
(3)一个操作数是对象,则先调用 valueOf()或 toString()方法后再和返回值比较;
(4)不需要任何转换的情况下,null 和 undefined 是相等的;
(5)一个操作数是 NaN,则==返回 false,!=返回 true;并且 NaN 和自身不等;
(6)两个操作数都是对象,则比较他们是否是同一个对象,如果都指向同一个对象,则返回 true,否则返回 false。
(7)在全等和全不等的判断上,比如值和类型都相等,才返回 true,否则返回 false。
逻辑运算符规则扩展:
如果两边的操作数有一个操作数不是布尔值的情况下,与运算就不一定返回布尔值,此时,遵循已下规则:
1.第一个操作数是对象,则返回第二个操作数;
2.第二个操作数是对象,则第一个操作数返回 true,才返回第二个操作数,否则返回 false;
3.有一个操作数是 null,则返回 null;
4.有一个操作数是 undefined,则返回 undefined。
逻辑运算符扩展:
如果两边的操作数有一个操作数不是布尔值的情况下,与运算就不一定返回布尔值,此时,遵循已下规则:
1.第一个操作数是对象,则返回第二个操作数;
2.第二个操作数是对象,则第一个操作数返回 true,才返回第二个操作数,否则返回 false;
3.有一个操作数是 null,则返回 null;
4.有一个操作数是 undefined,则返回 undefined。
5.对于逻辑或(||)
若运算符前的表达式为真,则第二个表达式不再运算,
若运算符前的表达式为假,则结果为第二个表达式
例如:
var a=true||3;//true
var b=false||4//4
对于逻辑与(&&)
若运算符前表达式为真,则结果为第二个;若运算符前一个表达式为假,则结果为假,例如:
var a=true&&5;//5
var b=false&&5;//false
其它运算符:
(1)逗号运算符:逗号运算符可以在一条语句中执行多个操作。
var box = 100, age = 20, height = 178; //多个变量声明
var box = [1,2,3,4,5]; //[1,2,3,4,5],数组的字面量声明
(2)三元条件运算符:三元条件运算符其实就是后面将要学到的 if 语句的简写形式。
var box = 5 > 4 ? '对' : '错'; //对,5>4 返回 true 则把'对'赋值给 box,反之。
运算符优先级:
在一般的运算中,我们不必考虑到运算符的优先级,因为我们可以通过圆括号来解决这种问题
var box = 5 - 4 * 8; //-27
var box = (5 - 4) * 8; //8