内核:渲染引擎、js引擎。 V8引擎 把js代码直接转化为机械码来执行。
解释性语言--不需要编译 (跨平台)、单线程。 动态类型的语言、基于对象的语言、弱类型的语言。
IE:trident;Chrome:webkit/blink;firefox:Gecko;Opera:presto;Safari:webkit;
BOM - 浏览器对象模型:一套操作浏览器功能的API
通过BOM可以操作浏览器窗口,比如:弹出框、控制浏览器跳转、获取分辨率等
DOM - 文档对象模型:一套操作页面元素的API
DOM可以把HTML看做是文档树,通过DOM提供的API可以对树上的节点进行操作
常见的脚本语言:t-sql、cmd
JavaScript运行在客户端脚本语言。number(int,float,double)、string、Boolean 、null、undefined、object、symbol
undefined表示一个声明了没有赋值的变量,变量只声明的时候值默认是undefined
null表示一个空,变量的值如果想为null,必须手动设置
获取变量数据类型:typeof 。
不要用小数去验证小数:let x=0.1,y=0.2; let sum=x+y;console.log(sum==0.3);//flase
不要用NaN验证是不是NaN:var num;console.log(num+10==NaN);//flase 使用isNaN() console.log(isNaN(num+1));
转整数:parseInt() 转小数:parseFloat() 转数字:Number()
转字符串:toString() String() 转布尔型:Boolean()
分支语句:if语句、if-else语句(范围判断)、switch-case语句(具体值的判断)、三元表达式
switch-case语句中和case后面的值比较采用严格模式比较。
var age = prompt('请输入您的年龄');//结果为字符串
循环语句:while()循环(先判断后执行);do{循环体}while(条件);for循环;
break 跳出当前循环所在的循环; 循环中continue 关键字,直接开始下次循环;
数组:var arr= [1,3,5,7,5,9,10]; var max = arr[0]; for(var i =0;i<arr.length;i++){ if(max<arr[i]){ max = arr[i]}} console.log(max);
反转数组--把数组中的数据的位置调换:
var array =[10,20,30,40,50,60];
for(var i=0;i<array.length/2;i++){
var temp = array[i];
array[i] = array[array.length -1 - i];
array[array.length -1 - i] = temp;
}
console.log(array);
输入班级人数,求总成绩,平均值,最高分,最低分;
var perCount = parseInt(prompt("请输入人数")); //转数字类型
var perScores = []; //存储成绩
for(var i = 0;i<perCount;i++){
//把每个人的成绩存储到数组中
perScores[perScores.length] = parseInt(prompt("请输入第"+(i+1)+"个人分数"));
}
var sum = 0;
for(var i=0;i<perScores.length;i++){
var sum = sum+perScores[i];
}
console.log(sum);
var avg = 0;
avg = sum/perScores.length;
var max = perScores[0]; //最大
var min = perScores[0]; //最小
for(var i = 0; i<perScores.length;i++){
if(max<perScores[i]){
max = perScores[i];
}
if(min>perScores[i]){
min = perScores[i]
}
}
console.log(max,min);
冒泡排序:
var array = [10,20,11,15,22,20,10];
//循环控制比较的轮数
for (var i= 0;i<array.length-1;i++){
//控制每一轮的比较的次数
for(var j = 0;j<array.length-1-i;j++){
if (array[j]>array[j+1]){
var temp = array[j];
array[j] = array[j+1];
array[j+1] = temp;
}
}
}
console.log(array);
函数:先定义后调用;函数名,驼峰命名法;
函数参数:形参,函数在定义的时候小括号里的变量叫形参;实参,函数在调用的时候小括号里传入的值叫实参,实参可以是变量也可以是值。 形参的个数和实参的个数可以不一致。
函数的返回值:函数内return关键字,关键字后有内容,则该内容被返回。当函数被调用后,需要获取返回值,就可通过定义变量来接收;
判断一个数是否是素数(质数);
function isPrimeNumber(num) {
for (var i =2;i<num;i++){
if(num%i == 0){
return false;
}
}
return true
}
console.log(isPrimeNumber(111)?"是质数":"不是质数");
/求菲波那切数列,1,1,2,3,5,8,13,21,34,55,89,144
function getFib(num) {
var num1 = 1;
var num2 = 1;
var sum = 0;
for(var i =3; i<num;i++){
sum = num1+num2;
num1 = num2;
num2 = sum;
}
return sum;
} consol.log(getFiber(12));
function getDay(year,month,day) {
var days = day;
if(month === 1){
return days;
}
var months = [31,28,31,30,31,30,31,31,30,31,30,31];
for (var i = 0;i<month-1;i++){
days+=months[i];
}
if(year%4 == 0&&year%100!=0||year%400==0){
days++;
}
return days;
}
函数表达式:把一个函数给一个变量,此时形成了函数表达式。
var f1 = function(){ console.log("乖") };
(function(){console.log("乖");}();// 函数自执行,声明的同时,直接调用。一次性的;
函数是有数据类型的,数据类型:Function类型; js没有块级作用域;
局部变量:
全局变量:
预解析: 在执行代码之前做的事情; 变量的声明和函数的声明被提前了,变量和函数的声明会提升到当前所在的作用域的最上面; 函数中的变量声明,会提升到函数的作用域的最上面(里面);
预解析过程:
1. 把变量的声明提升到当前作用域的最前面,只会提升声明,不会提升赋值。
2. 把函数的声明提升到当前作用域的最前面,只会提升声明,不会提升调用。
3. 先提升var,在提升function
面向对象特性:封装,继承,多态。 js不是面向对象的语言,但可以模拟面向对象的思想; js是一门基于对象的语言。
对象:有属性和方法,特指的某个事物;
创建对象三种方式:1.调用构造函数创建对象: var obj = new Object();
在当前对象的方法中是可以访问当前这个对象的属性的值;
工厂模式:function createObject(){ var obj = new Object(); obj.call = function(){}; return obj; }
2.自定义构造函数创建对象:function Person(){ this.name = "明" } var object= new Person();
函数和构造函数的区别:名字是不是大写(首字母是大写);
3.字面量的方式创建对象:var obj = { } //空对象; 字面量创建对象的缺陷:一次性的对象;
构造函数 ,是一种特殊的函数。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,总与new运算符一起使用在创建对象的语句中。
1. 构造函数用于创建一类对象,首字母要大写。
2. 构造函数要和new一起使用才有意义。
new在执行时会做四件事情
new会在内存中创建一个新的空对象
new 会让this指向这个新的对象
执行构造函数 目的:给这个新对象加属性和方法
new会返回这个新对象
json格式的数据:一般都是成对的,是键值对,
json也是一个对象,数据都是成对的,一般json格式的数据无论是键还是值都是用双引号括起来的;
json的数据实际上就是格式化后的一组字符串的数据
var json ={“name”:"明",“age”:"10"};
遍历对象,不能通过for循环遍历,无序; 可以通过for-in 循环;for(var key in json){ console.log(json[key])}
基本类型(简单类型),值类型:number,string,boolean
复杂类型(引用类型):object 空类型:undefined,null
JavaScript中的对象分为3种:内置对象、浏览器对象、自定义对象
JavaScript 提供多个内置对象:Math/Array/Number/String/Boolean...
对象只是带有 属性 和 方法 的特殊数据类型。
Math对象
Math对象不是构造函数,它具有数学常数和函数的属性和方法,都是以静态成员的方式提供跟数学相关的运算来找Math中的成员(求绝对值,取整)
Math.PI // 圆周率 Math.random() // 生成随机数 [0,1)
Math.floor()/Math.ceil() // 向下取整/向上取整 Math.round() // 取整,四舍五入
Math.abs() // 绝对值 Math.max()/Math.min() // 求最大和最小值 Math.sin()/Math.cos() // 正弦/余弦 Math.pow()/Math.sqrt() // 求指数次幂/求平方根
Date对象:
var now = new Date();
console.log(now.valueOf()); // 获取距1970年1月1日(世界标准时间)起的毫秒数
toString() // 转换成字符串 valueOf() // 获取毫秒值
getTime() // 返回毫秒数和valueOf()结果一样,valueOf()内部调用的getTime()
getMilliseconds()
getSeconds() // 返回0-59
getMinutes() // 返回0-59
getHours() // 返回0-23
getDay() // 返回星期几 0周日 6周6
getDate() // 返回当前月的第几天
getMonth() // 返回月份,***从0开始***
getFullYear() //返回4位的年份 如 2016
function getInterval(start, end) {
var day, hour, minute, second, interval;
interval = end - start;
interval /= 1000;
day = Math.round(interval / 60 /60 / 24);
hour = Math.round(interval / 60 /60 % 24);
minute = Math.round(interval / 60 % 60);
second = Math.round(interval % 60);
return {
day: day,
hour: hour,
minute: minute,
second: second
}
}
Array.isArray() HTML5中提供的方法,有兼容性问题
函数的参数,如果要求是一个数组的话,可以用这种方式来进行判断
- toString() 把数组转换成字符串,逗号分隔每一项
- valueOf() 返回数组对象本身
1 栈操作(先进后出)
push() //追加
pop() //取出数组中的最后一项,修改length属性
2 队列操作(先进先出)
push()
shift() //取出数组中的第一个元素,修改length属性
unshift() //在数组最前面插入项,返回数组的长度
3 排序方法
reverse() //翻转数组
sort(); //即使是数组sort也是根据字符,从小到大排序
// 带参数的sort是如何实现的?
4 操作方法
concat() //把参数拼接到当前数组
slice() //从当前数组中截取一个新的数组,不影响原来的数组,参数start从0开始,end从1开始
splice() //删除或替换当前数组的某些项目,参数start, deleteCount, options(要替换的项目)
5 位置方法
indexOf()、lastIndexOf() //如果没找到返回-1
6 迭代方法 不会修改原数组(可选)
every()、filter()、forEach()、map()、some()
7 方法将数组的所有元素连接到一个字符串中。
join()
String对象
- 字符串的不可变
重新给字符串赋值,会重新在内存中开辟空间,这个特点就是字符串的不可变; // 由于字符串的不可变,在大量拼接字符串的时候会有效率问题
字符串对象的常用方法
charAt() //获取指定位置处字符
charCodeAt() //获取指定位置处字符的ASCII码
str[0] //HTML5,IE8+支持 和charAt()等效
/2 字符串操作方法
concat() //拼接字符串,等效于+,+更常用
slice() //从start位置开始,截取到end位置,end取不到
substring() //从start位置开始,截取到end位置,end取不到
substr() //从start位置开始,截取length个字符
3 位置方法
indexOf() //返回指定内容在元字符串中的位置
lastIndexOf() //从后往前找,只找第一个匹配的
4 去除空白
trim() //只能去除字符串前后的空白
5 大小写转换方法
to(Locale)UpperCase() //转换大写
to(Locale)LowerCase() //转换小写
6 其它
search()
replace() //替换
split()
fromCharCode()
String.fromCharCode(101, 102, 103); //把ASCII码转换成字符串
"abcoefoxyozzopp"查找字符串中所有o出现的位置
var s = 'abcoefoxyozzopp';
var array = []; var index = 0;//开始的位置 var key = "o"; //要找的字符串
do {
var index = s.indexOf(key, index + 1);
if (index != -1) {
array.push(index);
}
} while (index > -1);
console.log(array);
找到字符串中每个字符串出现次数:
var str= “whatOareYyouYnoYshaHleiHoHmygod”;
str = str.toLocaleLowerCase();
var obj = {}; //空对象,把字母作为键,次数作为值;
for(var i =0;i<str.length;i++){ //遍历字符串,获取每个字母
var key = str[i];
if(obj[key]){ //判断obj中有没有这个键
obj[key]++;
}else{ //对象中没有这个字母,就把字母加到对象中,并给这个字母出现的次数
obj[key] = 1;
}
}
//遍历对象,显示每个字母的次数
for(var key in obj){
console.log(key+"出现了"+obj[key]+"次")
}