JavaScript 基础随记

内核:渲染引擎、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]+"次")
}

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值