一、javascript 与 ECMAscript。
javascript 是基于 ECMAscript 为核心的基础上,结合 DOM 和BOM 方法和接口实现的综合语言。
ECMAscript 是一个开发规则,web 是 ECMAscript 的宿主环境之一。node也是宿主环境之一。
javascript 是 ECMAscript 的扩展。
二、<script></script>.
属性为 src ,可以引用任何域内的文件,不规定是否是以 .js 作为后缀名。
src 为阻塞加载,即当js 文件没有加载完成时,浏览器是不加载 script 标签之后的东西的。
type = text/javascript
当src 属性存在时,script 标签内部写入的js会被忽略。、
三、noscript
noscript 标签是在浏览器不支持jsvascript 或者 用户关闭了jsvascript 功能之后显示的元素,<noscript>文本写在这里</noscript>。当javascript被支持的时候,noscript是不显示的。
四、变量。
ECMAscript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据。
每个变量仅仅是用于保留值的占位符。用var 定义变量。
五、数据类型
五种简单数据类型
Null ,Undefined ,Number ,Boolean, String
一种复杂数据类型
Object
通过typeof 返回的数据类型。
typeof Null == Object
typeof Number == number
typeof String == string
typeof Boolean = boolean
typeof Unbefined == undefined
typeof array = Object
typeof object = object
typeof function = function
////////
undefined
undefined 的定义主要是通过var定义之后,并没有赋值,则ECMAscript 会定义为undefined。并不提倡 var a = undefined; 的写法,因为undefined 最明显的作用是为了比较一个变量的值是否等于 undefined ,用于比较。
undefined 的变量和没有通过var 定义的变量不同,如果没有通过var 声明,则会直接报错 not defined 。如果没有通过var 定义,但是typeof 依然会返回 undefined。即对未初始化和未定义的变量 的返回值都为undefined。
null
null 代表一个指针,指向一个值为空的对象。
undefined == null 是因为 undefined 实际上是从null派生出来的,所以 ECMAscript 规定 他们的相等性测试返回true。
不提倡 将变量直接显式的赋值为undefined。
提倡 定义一个空的对象的变量时,应该明确的让变量保存null值。
这有助于区分null 和undefined 的区别
Boolean
true 和 false
Boolean() 却可以将括号内变量转化为boolean值。转换的值只有true 和false 两种。
number类型
console.log(Boolean(1));//true 任何非0数字都被转换为true,包括负数和无穷大。 console.log(Boolean(0));//false 0 和 NaN 转换为false console.log(Boolean(-1));//true
string 类型
console.log(Boolean(""));//false 空字符串会转换为false console.log(Boolean("we"));//true 任何非空字符串都会转换为true
boolean类型 结果显而易见
console.log(Boolean(true));//true console.log(Boolean(false));//false
Object类型
var a = {}; console.log(Boolean(a));//true 任何对象都会被转换为true console.log(Boolean(null));//false null会被转换为false
undefined 类型 undefined类型只有一个值 undefined 所以只能被转换为false。
console.log(Boolean(undefined));//false undefined会被转换为false
Number
ECMAscript 在严格模式下不支持 8进制的数字。
1、浮点数。
即必须有一个小数点,且小数点后要有一个数字。
因为存储浮点数的内存是整数的两倍,所以ECMAscript 会适时的将浮点数转换为整数,如果 小数点后没有数字和 小数点后数字为0的情况下,会将浮点数转换为 整数。
10.0 = 10 10. = 10
但是 0.1 + 0.2 ==0.3 返回的确实 false, 最高精度为17位小数, 将大于6个0 的数值转换为e , 即 1000000 = e的6次方。
2、数值
isFinite() 会测试括号内的数字是不是有穷的,即最大值为无穷大,最小值为无穷小。
浏览器可以显示的最大值和最小值
console.log(Number.MIN_VALUE);// 可以显示的最小值 5e-324 console.log(Number.MAX_VALUE);//可以显示的最大值 1.7976931348623157e+308
isFinite() 会比较 括号内的值是否在 最大值和最小值之间。
3、NaN。
一个特殊的数字,用于应该返回数字,但是没有返回数字的情况。
任何涉及NaN的操作,最终结果都会返回NaN。
NaN和任何值都不想等,包括自身。
isNaN() 将内容转换为数值,判断结果是否为NaN。
4、数值转换
Number(),parseInt(),parseFloat().
number() 忽略0开头,空字符串 转换为 0;
parseInt()具有两个参数,第二个参数可以指定转换的进制类型,忽略小数点之后的数字,返回整数
parseFloat()一个参数,识别第一个小数点,忽略第二个小数点之后的数字,忽略0开头。
string
string 字符串定义之后不能够更改,只能用其他值填充,可以有单引号和双引号包含表示,但是单双引号必须成对匹配出现。当存在特殊的字符字面量的时候,需要通过来进行转义。
有string.length 属性,返回字符的长度。
string 的更改必须先销毁之前的字符串,然后用另一个包含新值的字符串填充该变量。
转换为字符串 toString() 方法。
String(a) 方法,如果 a 有toString 方法,则会调用该方法,如果是null,undefined,则返回字面量。
Object
ECMAscript中的对象是 一组数据和功能的集合。可以通过new 操作符和要创建的对面类型的名称来创建。
var a = new Object(); var a = new String(); var a = new Boolean(); var a = new Array(); var a = new Number();
六、操作符
1、递增和递减
--a,++a 前置递增和前置递减,会在引用a之前完成计算操作。a--,a++ 是后置递减和递增,会在引用了a值计算之后才进行递增和递减的计算。
前置递增和递减操作是域执行语句的优先级想等。
当 a是字符串类型的话,如果其中含有数字,则会将a转换为数字之后进行计算,如果不含数字,则会转换为NaN。字符串变为 数值变量
a是布尔值,则会将a true 转换为1,false转换为0,然后进行计算,布尔变量转换为 数值变量。
a 是浮点数或整数时,直接进行 数值计算。
a 是对象时,则会先执行 valueOf() 操作,取得可以执行以上可操作的值,如果为NaN,则执行toString()。对象值变成数值变量。
2、-,+。
+ 在数字之前不会对数值产生任何影响。
- 主要表示负数。
+ 后跟着非number类型的值时,会执行 Number()操作。
- 后跟着非number 类型的值时,后执行number()操作,然后在结果上添加 负号
3、逻辑操作符。也叫 布尔操作符。
或与非 | && !
返回的都是 布尔值。
逻辑 非
用一个感叹号表示 ! ,判断是否为真,如果为真,则返回 false ,如果为false 则返回true,在判断之前会 执行 boolean() 操作,将 感叹号后的值转化为boolean值之后再进行判断。
逻辑 与 &&
a&&b 判断boolean(a)与boolean(b) 的值是否同时为true,如果都为true,则返回true,如果有一方不是true,则会返回false。而且当 第一个值a 的返回值为false 的时候,会跳过b 的判断,直接返回false。 所以 逻辑 与 时一种短路操作符。
逻辑 或 ||
a || b 判断,如果a和b中有一个为true,则会返回true,只有两个都有为false 的时候才会返回false。 逻辑或 也是短路操作符,即如果第一个值为true' 的时候,就会跳过b 的判断,直接返回true。
可以用于 赋值操作,如果a为true,则直接采用a 的值,否则采用b 的值。类似与 a?a:b; 三目运算符。先判断a,如果a为true 则返回 a,否则返回b。a为优先,b作为备用。
4、* 乘法 / 除法 % 求模
乘法 a*b
如果a或b有一个不是数值,则后台执行number(),转换为数值之后再进行计算。
除法 a/b
都是数值,则进行常规的除法运算。
如果a或b有一个不是数值,则后台执行number(),转换为数值之后再进行计算。如果b为0,则返回NaN。
% 求模 a%b 返回 的是余数。
都是数值,则进行常规的除法运算。返回 余数。
如果a或b有一个不是数值,则后台执行number(),转换为数值之后再进行计算。如果b为0,则返回NaN。
5、+ - 加法 和 减法
加法 a+b
如果a 和 b都是数字,则进行常规的加法运算
如果有一方为NaN,则结果为NaN。
如果a是字符串,b为非字符串,则将 b 在后台通过 toString() 方法转换为字符串,与a进行字符串拼接。
小括号包含的可以优先计算
减法 a-b
如果a 和 b都是数字,则进行常规的加法运算
如果有一方为NaN,则结果为NaN。