JavaScript-第一周学习总结:
1.JavaScript的实现
JavaScript是一种动态弱类型的语言。
JavaScript 中包含有 ECMAScript(核心),DOM (文档对象模型),BOM(浏览器对象模型)。
其中 :DOM (Document Object Model)是一个应用编程接口(API),用于在HTML中使用扩展的XML。
DOM通过创建表示文档的树 ,让开发者可以随心所欲地控制网页的内容和结构。使用DOMAPI,可以轻松地删除,添加,替换,修改节点。
2.对于< script >元素的学习;
1.js的书写位置 :同 css 一样 ;
- 行内式 ;
- 内嵌式;
- 外部文件;
2.js标签的位置。
-
如果放在< head >标签内,可以将JavaScript文件,与CSS文件都集中放在一起 ,但是如果放在< head > 中就必须把JavaScript代码下载完毕后才可以渲染页面 ,导致页面渲染的明显延迟 。
-
将js引用标签放在< body >中 ,放在< body >元素中的页面内容后面 ,这样就页面会处理JavaScript代码之前完全渲染页面 ,用户就会感到加载速度更加快了。
-
推迟执行脚本:那么有没有办法解决 1 中的问题 ,HTML4.01中定义了一个叫defer的属性。 设置defer属性,相当于告诉浏览器立即下载,但延迟执行。 但如果有两个以上的js文件,那么就无法保证js文件的执行顺序。所以最好只包含一个这样的脚本。
-
异步执行脚本:添加async属性 ,目的是告诉浏览器,不必等脚本下载和执行完后再加载页面,也不必等到该异步脚本下载和执行后再加载其他脚本。(一般不用);
3.js的语法以及注意事项
-
注意事项:ECMAScript中一切都区分大小写,无论是变量,函数名还是操作符,都区分;
-
标识符 :是由字母,下划线,美元符号和数字组成,但第一个字符是由字母,下划线(—),美元符号,并且使用驼峰命名法来命名;
-
在脚本开头加上“use strict”;可以进入严格模式。
-
变量可以用 var , let ,const 声明 , ECMAScript中变量是松散类型的,意思是变量可以用于保存任何类型的数据。每个变量只不过是一个用于保存任意值的方块(命名占位符),在染色(保存值)以前是不知道它的颜色(类型)的。
-
var 关键字 :使用var 可以声明一个变量 ,使用这个关键字声明的变量会自动提升到函数作用域顶部;
-
let 关键字 :和var作用差不多,但有一些区别,最明显的区别是 :1. let声明的范围是块作用域,而var声明的范围是函数作用域。 2.let也不允许同一个块作用域中出现冗余声明。3.使用let在全局作用域中声明的变量不会成为window的对象属性。
-
const 关键字 :使用它声明变量时必须同时初始化变量,并且该变量为只读变量。
js的数据类型。
Number类型 (数值), boolean类型(布尔值) ,string类型(字符串) , object类型(对象) ,function类型 (函数) , symbol类型(符号) ,undefined类型(未定义);
- 可以使用typeof操作符来验证数据类型。
- number类型:整数,浮点数,不要判断两个浮点数相等。
- 最小值:Number.MIN_VALUE,这个值为: 5e-324
最大值:Number.MAX_VALUE,这个值为: 1.7976931348623157e+308
无穷大:Infinity
无穷小:-Infinity - string类型
-
通过length属性用来获取字符串的长度 ;
-
使用 + 可以连接字符串
-
boolean类型
-
Boolean字面量: true和false,区分大小写
-
计算机内部存储:true为1,false为0。
-
-
unfinished类型:undefined表示一个声明了没有赋值的变量,变量只声明的时候值默认是undefined
-
null类型 :为空值,如果没有想要给赋的值,就赋值为null;
数据转换
- 转化为string类型:
-
toString()
var num = 1 ; num.toString() ;
-
String()强制转换
var num = 1 ; String(num);
-
隐式转换 ,通过和字符串拼接来转换;
-
转换为number类型:
1.number()
Number()可以把任意值转换成数值,如果要转换的字符串中有一个不是数值的字符,返回NaN
2.parseInt()
var num1 = parseInt("12.3abc"); // 返回12,如果第一个字符是数字会解析知道遇到非数字结束,'.'为字符
var num2 = parseInt("abc123"); // 返回NaN,如果第一个字符不是数字或者符号就返回NaN
3.parseFloat
parseFloat()把字符串转换成浮点数,parseFloat()和parseInt非常相似,不同之处在与parseFloat会解析第一个. 遇到第二个.或者非数字结束如果解析的内容里只有整数,解析成整数
4.隐式转换
通过’-’,’/’,’*'运算符可以转换为number类型。
-
转换为Boolean类型
Boolean(),0 ‘’(空字符串) null undefined NaN 会转换成false 其它都会转换成true。
运算符
基本与c语言相同 ;但有需要注意的地方:
- == 会默认转换数据类型 ,转为数字型 。
- == = 为全等于 (值 , 数据类型完全一致) !==为不全等于;
- 优先级从高到底
- () 优先级最高
- 一元运算符 ++ – !
- 算数运算符 先* / % 后 + -
- 关系运算符 > >= < <=
- 相等运算符 == !== != ===
- 逻辑运算符 先&& 后||
- 赋值运算符
语法
与c语言相通
数组
- 通过new创建 ,
var a = new Array() ;
- 利用数组字面量:
// 创建一个空数组
var arr1 = [];
// 创建一个包含3个数值的数组,多个数组项以逗号隔开
var arr2 = [1, 3, 4];
// 创建一个包含2个字符串的数组
var arr3 = ['a', 'c'];
// 可以通过数组的length属性获取数组的长度
console.log(arr3.length);
// 可以设置length属性改变数组中元素的个数
arr3.length = 0;
函数
-
函数声明
function 函数名(){ // 函数体 }
-
函数表达式
var fn = function() { // 函数体 }
-
函数中的arguments的使用
JavaScript中,arguments对象是比较特别的一个对象,实际上是当前函数的一个内置属性。也就是说所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有的实参。arguments是一个伪数组,因此及可以进行遍历。
4.全局变量和局部变量
-
全局变量
在任何地方都可以访问到的变量就是全局变量,对应全局作用域
-
局部变量
只在固定的代码片段内可访问到的变量,最常见的例如函数内部。对应局部作用域(函数作用域)
//不使用var声明的变量是全局变量,不推荐使用。
//变量退出作用域之后会销毁,全局变量关闭网页或浏览器才会销毁
function fn(){
var i = 0 ;//i为局部变量;
console.log(i);
}
function fn2(){
i = 0 ;//i为全局变量;
console.log(i);
}
5.预解析
-
意义:预解析js引擎会把js里面所有的var和function提升到当前作用域的前面。
-
变量预解析(变量提升) , 把所有的变量声明提升到当前的作用域最前面,但是不提升赋值操作。
function fn(){ console.log(i);//undefined var i = 0; } //等价于 funtion fn(){ var i; console.log(i); i = 0; }
-
函数预解析(函数提升), 把所有的函数声明提升到当前的作用域最前面,但是不调用函数。
-
注:
//有以下代码: function fn(){ var a = b = c = 9;//等价于:var a = 9; b = 9; c = 9; console.log(a);//9 console.log(b);//9 console.log(c);//9 } console.log(b);//9 console.log(c);//9
对象
- 现实生活中:万物皆对象,对象是一个具体的事物,一个具体的事物就会有行为和特征。
举例: 一部车,一个手机
车是一类事物,门口停的那辆车才是对象
特征:红色、四个轮子
行为:驾驶、刹车(粘贴而来)
- 事物的特征在对象中用属性来表示。
- 事物的行为在对象中用方法来表示。
-
创建对象的方法
-
利用字面量
var obj = { name: 'zs',//用逗号分隔,用冒号引: age: 18, sex: 'man', sayHi: function () { console.log(hi~); } };
-
利用new Object 创建对象
var Star = new Object(); star.name = 'ldh';//用 等于号 = 引 ,用分号分割 ; star.age = 35; star.job = 'actor'; star.sayHi = function(){ console.log('hi~'); }
-
利用函数创建对象
function Star(name,age,job){ this.name = name;//用this指向对象 this.age = age; this.job = job; this.sayHi = function(){ console.log('Hello,everyBody'); } } var p1 = new Star('张三', 22, 'actor');//用new在内存中创建一个空的对象
-
遍历对象
//用for in遍历对象 var obj = { }; for (var key in obj){ console.log(obj[k]); }
-