文章目录
- 一、常量
- 二、变量
- 1.变量定义/声明
- 2.变量命名
- 3.数据类型
- 3.1 基本数据类型和引用数据类型
- 3.2 基本数据类型和引用数据类型区别
- 3.3 数据类型的判断
- 3.4 数据类型的转换
- 4. JS是弱引用语言
- 三、运算符
- 1. 算数运算符
- 2. 赋值运算符
- 3. 一元运算符
- 4. 关系运算符
- 5.逻辑运算符
- 6.位运算符
一、常量
常量/直接量( 字面量 literal):就是程序中直接显示出来的数据
100 //数字字面量
‘田雨飞’ //字符串字面量
false //布尔字面量
二、变量
1.变量定义/声明
定义:var age; //var 是关键字,age是变量名
赋值: age = 20;
定义的同时赋值: var age = 20;【注】声明/定义变量的同时,赋值,叫做初始化。
可以一次定义多个变量: var name=“tianyufei", age=18,weight=108;
2.变量命名
【注】用户自定义的名字叫做标识符,变量名也是标识符。JS的标识符:■ 标识符是指JS中定义的符号,例如:变量名、函数名等。■ 标识符可以由任意的大小写字母、数字、下划线(_)和美元符($)组成,但是不能以数字开头,不能是js中的保留字、关键字。■ 标识符区分大小写,如:age和Age是不同的变量。但强烈不建议,用同一个单词的大小写区分两个变量。■ 见名思意
3.数据类型
3.1 基本数据类型和引用数据类型
基本数据类型:String、Number、Boolean、Null、Undefined、Symbol
引用数据类型:Object(Array、Date、String、Number、Boolean、RegExp、Function)
内置对象继承自Object,Function.prototype._ _ proto _ _ = Object.prototype
3.2 基本数据类型和引用数据类型区别
基本数据类型和引用数据类型
- 内存分配区别:存放在栈内存中简单的数据段——存储在堆内存的多个值构成的对象
- 访问方式区别:值访问——地址访问
- 变量拷贝区别:完全复制——只复制地址
- 参数传递区别:变量值传递给参数(互不影响)—— 参数的值为对象地址(互相影响)
3.3 数据类型的判断
(1)typeOf:判断5种基本数据类型,null会返回Object
(2)A instanceof B:判断对象类型,可以判断自定义对象类型
检验A是否为B的实例对象:查看B的原型对象是否在A的原型链上
(3)Object.prototype.toString.call():判断基本数据类型和引用数据类型,但是不能判断自定义类型
3.4 数据类型的转换
相等和全等区别
相等:先强制转换变量类型,再比较
全等:不转换类型,一旦类型不同,就是不全等(1)强制转换
Number(参数):把任何类型转换成数值类型;
String(参数):可以将任何类型转换成字符串;
Boolean(参数):可以将任何类型的值转换成布尔值;
parseInt(参数1)将字符串转换成整数;parseInt(‘123’) // 123
parseFloat()将字符串转换成浮点数字;(2)隐式转换
+:字符串+任何数据类型 = 字符串
-/:数字 (-/) 任何数据类型 = 数字
规则1:任何类型的数据和字符串类型的数据做相加(+)操作时,其他数据类型会自动的转换为字符串类型。此时的相加(+)不再是数学意义上的加法,而是表示“拼接”的意思
规则2:任何其他数据除了和字符串做相加操作外,与数字类型做算术运算时,其他数据会自动的转换为数字,字符串是数值会自动的转换为数字,否则会转换为NaN(对于非法字符的情况通常会返回NaN:‘1’‘a’ //NaN,这是因为parseInt(a)值为NaN,1NaN还是NaN)。
规则3:任何数据除了和字符串做相加运算外,与NaN做算术运算的结果始终都是NaN。包括NaN本身和NaN做运算的结果也是NaN。判断语句中的判断条件需要是 Boolean类型
对象 => 字符串 => 数值 布尔值 => 数值
对象和布尔值进行比较时,对象先转换为字符串,然后再转换为数字,布尔值直接转换为数字console.log([] == true); //false []转换为字符串’’,然后转换为数字0,true转换为数字1,所以为false。对象和字符串进行比较时,对象转换为字符串,然后两者进行比较。
console.log([1,2,3] == ‘1,2,3’); // true [1,2,3]转化为’1,2,3’,然后和’1,2,3’, so结果为true;对象和数字进行比较时,对象先转换为字符串,然后转换为数字,再和数字进行比较。
console.log([1] == 1); // true 对象先转换为字符串再转换为数字,二者再比较 [1] => ‘1’ => 1 所以结果为true。字符串和数字进行比较时,字符串转换成数字,二者再比较。
console.log(‘1’ == 1) // true字符串和布尔值进行比较时,二者全部转换成数值再比较。
console.log(‘1’ == true); // true布尔值和数字进行比较时,布尔转换为数字,二者比较。
console.log(true == 1); // true
undefined和null 比较返回true,二者和其他值比较返回false
2==true为false
字符串进行大小比较时:Number(‘23’ < ‘3’) == true:单个进行ASCII值的大小比较
Number(false) == 0 Number([]) == 0 Number(null) == 0
0 ‘’ null undefined —— false
非空字符串(包含空格)-> true;null 表示是一个空对象,属于无值类型
undefined 表示未赋值,属于无值类型
’ ’ 表示是一个空字符串,属于有值类型
0 表示一个数字0,属于有值类型
false 表示一个布尔值 false,也属于有值类型
可以看到 null 和 undefined 属于无值类型,它们同有值类型肯定是不相等了。
null == undefined
‘’,0,false两两相等
null、undefined与0、‘’、false个皆不等
‘’ == ‘ ‘ //false Number(’’)==Number(’ ')//true
null、undefined、NaN、‘’ 、0、false取反为true,其余取反为false(![] = false)
4. JS是弱引用语言
js是弱数据类型的语言,容错性较高。
定义时不需要定义类型,赋值赋的是啥类型就是啥类型
var temp; //temp时啥数据类型?不确定
temp= 12; //temp变量是数字类型
temp = “hello”; //temp变量变成了字符串类型怎么运行查看变量的类型
var x=123;
alert(typeof x);
三、运算符
算术运算符:+,-, * , /, %
关系运算符:<、>、<=、>=、== 、=== 、!= 、!==
逻辑运算符:&& 与(且)、|| 或、! 非
赋值运算符: =、+=、-=、*=、/=、%=
一元运算符(自增、自减): ++a, a++ --a, a–
1. 算数运算符
算术运算符:+,-, * , /, %
当被除数为0的时候:
正数/0 结果为 infinity (无穷大)
负数/0 结果为 -infinity(无穷小)
2. 赋值运算符
【赋值运算符】 =、+=、-=、*=、/=、%=
- 赋值运算符用等于号(=)表示,就是把右边的值赋给左边的变量。
- 复合赋值运算符通过 x=的形式表示,x 表示算术运算符。
3. 一元运算符
【一元运算符】(自增、自减): ++a, a++ --a, a- -
概念:只能操作一个值的运算符叫做一元运算符。var age = ++box; //加后取值 先执行加法运算,在取值
var height = box++; //加前取值 先取值,再执行加法运算
4. 关系运算符
【注】用于进行比较的运算符称作为关系运算符:小于(<)、大于(>)、小于等于(<=)、大于等 于(>=)、相等( == )、不等(!=)、全等(恒等)(=== )、不全等(不恒等)(!==)
关系运算的规则
和其他运算符一样,当关系运算符操作非数值时要遵循一下规则:
- 两个操作数都是数值,则数值比较;
- 两个操作数都是字符串,则比较两个字符串对应的字符编码值;
- 两个操作数类型不同,转换为相同类型后进行比较,转换规则:对象 => 字符串 => 数值 布尔值 => 数值(详情见3.4 数据类型转换)
- 在全等和全不等的判断上,比如值和类型都相等,才返回 true,否则返回 false
关系运算(特殊值)
5.逻辑运算符
逻辑运算符: 逻辑与(AND)、逻辑或(OR)、逻辑非(NOT)
逻辑运算的短路操作
逻辑与运算符属于短路操作,顾名思义,如果第一个操作数返回是 false,第二个数不管是 true 还是 false 都返回的 false。
逻辑或运算符也是短路操作。当第一操作数的求值结果为 true, 就不会对第二个操作数求值了。逻辑运算符(非) 逻辑非(NOT):!
逻辑非运算符可以用于任何值。无论这个值是什么数据类型,这个运算符都会返回一个布尔值。它的流程是:先将这个值转换成布尔值,然后取反,规则如下:
- 操作数是一个空字符串,返回 true;
- 操作数是一个非空字符串,返回 false;
- 操作数是数值 0,返回 true;
- 操作数是任意非 0 数值(包括 Infinity),false;
- 操作数是 NaN,返回 true;
- 操作数是 undefined,返回 true;
6.位运算符
http://www.w3school.com.cn/js/pro_js_operators_bitwise.asp