CSS
Javascript
Javascript 三大部分
- ECMAScript (JS 的语法和基本对象)
- DOM (文档对象模型:处理网页内容的方法和接口)
- BOM (浏览器对象模型:与浏览器交互的方法和接口)
Javascript 特点
解释性语言
:语言分为两种
解释性语言:翻译一行执行一行,不会生成文件
优点:可以跨平台(windows linux )
缺点:编译稍微慢编译性语言:翻译过程为通篇翻译,看完一行,看完第二行,看完全部,生成翻译完的文件,并且执行翻译完的文件( 列如 C C++ )
优点:编译快
缺点:不可以跨平台
单线程
:线程分为两种
- 单线程(同步):同一时间只能做一件事
- 多线程(异步):同一时间做多件事
数据类型 —- 值类型(分为两类)
栈数据(原始值,基本数据类型)
:Number String Boolean undefined null (五大类)
原始值存在栈里面:简单数据类型的值是储存在栈中,当把一个变量传递给另一个变量时,是把一个栈中的东西复制到另一个到栈中,并且这两个变量互不影响,修改其中的变量值时,不会改变另外一个变量的结果。
var a = 1;
var b = a;
a = 2;
console.log(a); //2
console.log(b); //1
堆数据(引用值)
: array object function …..
引用值大致存在堆里面:引用值(复杂数据类型)是把引用变量的名称(内存地址)存储在栈中,但是把其实际对象存储在堆中,栈中的内存地址指向堆中的实际对象,当把引用对象传递给另一个变量时,复制的其实是指向实际对象的指针(内存地址),此时两者指向的是同一个数据,若通过方法改变其中一个变量的值,则访问另一个变量时,其值也会跟着改变, 因为 JavaScript 中对象的赋值是默认引用赋值的。
var a = [1];
var b = a;
a.push(2);
console.log(a); //[1, 2]
console.log(b); //[1, 2]
null 和 undefined 的区别
在一些情况下,null 和 undefined 几乎是一样的。例如:
if (!undefined) {// undefined is false
console.log('undefined is false');
}
if (!null) {// null is false
console.log('null is false');
}
if(undefined == null) {// true
console.log('undefined == null');
}
但是 null 和 undefined 仍然存在一些区别: 1.类型不一样
null 是一个 object!所以,我们可以这么理解,null 是一个对象的占位符,表示这个对象还未初始化,是个”空对象”;而 undefined 表示压根没人对这个变量做定义,没人知道这到底是个什么玩意儿。
console.log(typeof undefined); //undefined
console.log(typeof null); //object
2.转为数值时,值不一样
undefined 转为数值 NaN,null 转为数值 0。
console.log(Number(undefined)); //NaN
console.log(undefined + 10);//NaN
console.log(Number(null)); //0
console.log(null + 10); //10
null 的典型用法
(1) 作为函数的参数,表示该函数的参数不是对象。
function testObj(obj) {
if(null == obj) {
// 异常处理,比如创造一个新对象
}
}
(2) 作为对象原型链的终点。
Object.getPrototypeOf(Object.prototype)
// null
undefined 的典型用法
// (1)变量被声明了,但没有赋值时,就等于undefined。
var i;
i // undefined
//(2) 调用函数时,应该提供的参数没有提供,该参数等于undefined。
function f(x) {
console.log(x)
}
f() // undefined
// (3)对象没有赋值的属性,该属性的值为undefined。
var o = new Object();
o.p // undefined
//(4)函数没有返回值时,默认返回undefined。
var x = f();
x // undefined
运算符优先级
优先级 运算符 顺序
1 小括号 ()
2 一元运算符 ++ – !
3 算术运算符 先 * / % 后 + -
4 比较运算符 > >= < <=
5 相等运算符 == != === !==
6 逻辑运算符 先 && 后 ||
7 赋值运算符 =
与 或 非(逻辑运算符)
用来进行布尔值运算的运算符,其返回值也是布尔值(后续开发中常用于多个条件判断)
underfined null NaN “” 0 false
&& ( 与 )——短路语句
如果表达示为假,则会返回假的第一个假值,如果表达式都为真,则会返回最后那个真值( 碰到假就会返回该值 )
var a = 1 && 2 && 3; //3
var a = 1 && 0 && 3; //0
//短路作用 :确保代码能够正常执行,常用于后端获取数据后进行判断
if(data && data.下面的某个属性) {
...执行代码段
}
|| ( 或 )——兼容语句
如果表达式为真,则会返回第一个真值,如果表达式都为假,则会返回最后那个假值(碰到真就会返回该值)
var a = 2 || 3; //2
var a = 2 || 0 || 3 ; //2
var a = 0 || false ; //false
//兼容作用 :常用于确保代码能够多条件执行
var event = e || window.event;
!(非)—–取反符
用来取布尔值在取反
var a = !""; //true
var a = !123; //fals
var obj = {id:1, name:"marry"}
if(!!obj || id !=="") {
console.log(obj.name)
}