1.js=ECMA+DOM+BOM
ECMA:js语言核心语法;
DOM(Document Object Model)标准:专门操作网页内容的标准;
BOM(Browser Object Model):操作浏览器窗口的编程接口。
js是脚本程序,脚本程序:不需要预编译,边解释边执行的程序。
2.程序运行js代码时,一次引擎加载处理过程中,只要发生错误,错误即之后代码都不执行。
3.仅声明未赋值的变量,默认自动为:undefined;
使用未声明变量时,出现错误:not defined;
4.声明提前
在程序正式执行前,都会将所有 var 声明的变量提前到开始位置,集中创建,而赋值过程留在原地。
5.数据类型
分类:1)原始类型:值保存在变量本地;(Number、String、Boolean、undefined、null)
2)引用类型:值保存在变量本地;Object(JS中除了原始数据类型以外的都是对象,function、Array、data、正则等)
(1)Number
所占空间与数值大小无关,都占8字节。
舍入误差:计算机有些数无法精确表示;解决方法:对结算结果进行保留两位小数的四舍五入,n.toFixed(2)。
(2)String
一个字母、标点,占1个字节; 一个汉字,占2个字节。
字符串内容一旦创建,不可改变。要想改变,只能创建新字符串,替换旧字符串。
如果参与 + 运算的值中包含字符串类型数据,+ 法运算自动变为字符串拼接。
6.变量 vs 数据库
js中的变量:存储在内存中,临时的,存在客户端;
数据库:硬盘上存储数据的文件,持久的,服务器端。
7.数据类型转换(js是弱类型语言)
(1)隐式转换:无需程序员干扰,js 程序自动完成类型转换。
在 js 程序中,任何地方所需某种类型的数据,若提供的不是,则程序自动进行隐式类型转换。
仅影响表达式的运算结果,不影响变量中存储的实际值。
算数运算中的隐式转换:
- 算数计算中(-,*,/),一切类型都隐式转换为number类型,再计算。例:"2"—>2; true/false—>1/0;
- 特例:+ 运算中,只要有一方是字符串,俩数据都转为字符串,且 + 运算变为字符串拼接。字符串 + 任何类型 = 新字符串
表达式:从左至右,两两计算。
(2)强制类型转换:程序员主动改变数据类型。
1.任意类型 to String:
1) var str = x.toString();js中一切对象都有 toString 方法
2) var str = String(x);—> 隐式转换的本质,程序需要时,自动调用。
3)加号拼接字符串;(隐式转换)字符串 + 任何类型 = 新字符串
2.任意类型 to Number:
1) 任意类型 to Number:var n = Number(x);—> 隐式转换
2) String to Number:
var n = parseInt(str);原理:从str开始位置逐个读取每个字符知道碰到第一个不是数字的字符(包括小数点)时停止。
var n = parseFloat(str);原理:同上;能识别小数点。
特例:Number(" ")—> 0;空字符串转换成0。
3)任意类型 to Number:隐式转换(-,*,/)
3.任意类型 to Boolean:
var bool = Boolean(x);—> 隐式转换
" " NaN undefined null 0 —> false;
其余 —> true。
******凡是从页面获取的一切数据都是字符串类型******
8.算术运算中的 "++"
++n:先+,再执行;
n++:先执行,再+。
如下图所示,r1=10;r2=11;两中情况下 n=5 不变。
var n=2;
var r1=n++ + ++n + n++;
var r2=++n + n++ + ++n;
9.关系运算
将所有类型转为 number 类型(隐式转换),再比较。
(1)两字符串比较:一次比较每一位字符的Unicode
(2)NaN:NaN 不等于任何数据(包括自身)。
isNaN(num):专门判断 num 是否是 NaN。只要判断一个数值是否是数字或能否被转为数字,都用 isNaN 。
(3)undefined vs null
实质是一样的,undefined == null (返回true);但是,undefined === null (返回false);
===全等:先比较数据类型,再比较值(不带隐式转换)。不希望关系运算中自动隐式转换时使用。
(4)逻辑运算(与或非)、位运算(左右移)、扩展运算(+=)、三目运算。