js基础

 <!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>

浏览器不会执行JS代码,是通过JS内置引擎(解释器)来执行代码. 
BOM 浏览器对象模型
DOM 文档对象模型

javascript 由三部分组成:ECMAScript,DOM,BOM

 JavaScript 应用场景
1. 网页特效

2. 服务端开发(Node.js)

3. 命令行工具(Node.js)

4. 桌面程序(Electron)

5. App(Cordova) 

6. 控制硬件-物联网(Ruff)

7. 游戏开发(cocos2d-js)

行内样式   <button onclick="alert('你好啊')">点击</button>
内嵌样式   <script></script>
外部样式   <script src="outdoor.js"></script>  

警示框  alert('迪丽热巴');
控制台 console.log('古丽扎娜');
提示用户输入框 prompt('请输入您喜欢的明星:');
typeof() 判断数据类型
isNaN 检测是不是数字 是数值结果就是false  是字符就是true


什么是变量?
概念:变量是用于存放数据的容器.
声明变量,并赋值
语法:var 变量名 = 变量值;


二进制 0 1 
八进制 0~7
十进制 12  77  99
十六进制 0~9  a~f 0x12

数据类型转换
    typeof 检测字符或者数值    
    
    在chrome 里面 数值类型 是蓝色  字符型是 黑色
    数值里面只有一个字符就会转成 字符串
    
    Number()转成数字类型
    toString() 转换字符
    parseInt() 整数
    parseFloat 浮点数
    Boolean()  转换成布尔类型  只有 真/假   true/false 
    isNaN      不是数值(true)  是数值(false)  是不是人
    
    转换为Boolean值
    代表 空、否定的值 会被转换为 false 有五种  “ ''、0、NaN、null、undefined  
    其余任何值都会被转换为 true





       换行符(重要)newline


 

      斜杠 


'

      单引号 '


"

       双引号 "


	

       Tab


       

空格   blank





       回车符

&&并且    ||或者

1. ()  优先级最高 
2. 一元运算符  ++   --   !
3. 算数运算符  先*  /  %   后 +   -
4. 关系运算符  >   >=   <   <=
5. 相等运算符   ==   !=    ===    !==
6. 逻辑运算符 先&&   后||
7. 赋值运算符

if (条件表达式) {
    // [如果] 条件成立执行的代码
} else {
    // [否则] 执行的代码
}

if-else-if语句语法:
                if (表达式1) {
                    执行代码1
                } else if (表达式2) {
                    执行代码2
                } else if (表达式3) {
                    执行代码3
                } else {
                    执行代码4
                }

三运表达式达式1 ? 表达式2 : 表达式3


switch( 变量 ){ 
    case value1:
        //表达式结果 等于 value1 时 要执行的代码
        break;
    case value2:
        //表达式结果 等于 value2 时 要执行的代码
        break;
    default:
        //表达式结果 不等于任何一个 value 时 要执行的代码
}


for(初始化; 条件表达式; 自增表达式 ){
    //循环体
}
双重for循环
for (外循环的初始; 外循环的条件; 外循环的增量) {
    
    for (内循环的初始; 内循环的条件; 内循环的增量) {  

       需执行的代码;
   }

}

while (条件表达式) {
    // 循环体代码 
}


do{
    // 循环体代码 - 条件表达式为 true 时重复执行循环体代码
} while(条件表达式);

continue 跳出本次循环
break 退出整个循环


arr.length 获得数组长度
列如:
   <script>
        //索引下标    0      1        2       3        4       5       6
        var arr=['星期一','星期二','星期三','星期四','星期五','星期六','星期七',];
        console.log(arr[5]); //输出的是 星期六
        console.log(arr[2]);// 输出的是 星期三
        console.log(arr.length); //数组长度  7
    </script>

数组中i 代表数组 索引(下标) arr[i]代表数组的元素

翻转数组:
0,1,2,3,40,1,2,3,4 新    数组长度-i-1  length-i -1
冒泡
外层 数组长度-1  length-1  
内层 数组长度-i -1     length-i -1
判断进行交换


函数 就是 封装了 一段 可被重复调用执行的 代码块。

  基本函数写法:
                 function sayHi(){}
                 sayHi();
             匿名函数:
                 function(){}

             函数表达式
                 var fn=function(){}
                 fn();

             自调用函数: 
                 (function(){})()
            
             retrun 后的代码不被执行
            
            function add(num1,num2){
                //函数体
                return num1 + num2; // 注意:return 后的代码不执行
                alert('我不会被执行,因为前面有 return');
            }

    return 返回值

    arguments 伪数组

函数可以作为参数传递


function fn() {
    return function() {
        console.log('函数可以作为返回值');
    }
}

var ff = fn();
// 相当于
// var ff = function() {
//     console.log('函数可以作为返回值');
// };
ff();


局部变量

- 在局部作用域下声明的变量叫做局部变量(在函数内部定义的变量)
- 局部变量只能在该函数内部使用


全局作用域

供所有代码执行的环境(整个script标签内部)  或者一个独立的js文件中  


- JavaScript解析器会在全局环境下查找 var、function关键字,变量只声明不赋值,函数声明不调用。

- 预解析只发生在当前作用域下



对象: 就是将现实事物抽象为功能代码.  将现实世界的东西,用对象的语法格式来表示.
        对象的语法:  对象中有属性和方法
        (名词)   属性  
        (动词)    称为  方法
    


- 对象里面的属性调用 :   对象.属性名         这个小点 就理解为 的 

- 对象里面的属性另外调用方式 :   对象['属性名']    注意  方括号里面的属性 必须加 引号   我们后面会用

- 对象里面的方法调用: 对象.方法名()       注意这个方法名字后面一定加括号


对象.属性名
对象['属性名']
对象.方法名()  


        对象的三种写法: 
1.字面量写法
var star = {
    name : '刘德华',
    age : 18,
    sex : '男',
    sayHi : function(){
        alert('大家好啊~');
    }
};
console.log(star.name);
或console.log(star['name']);
star.sayHi();

对象.属性名
对象['属性名']
对象.方法名()


2. new Object()写法

var zs = new Object();
zs.name='张三';
zs.age=18;
zs.sayHi=function(){}

对象名.属性名 = 值
对象名.方法名 = function(){}


构造函数可以创建多个对象
把相同定的属性和方法进行抽象,然后进行函数封装
1. 构造函数用于创建某一大类对象,首字母要大写。

2. 构造函数要和new一起使用才有意义。


function 构造函数名(参数1..){
构造函数名首字母大写
this.属性名=属性值;
this.方法名=funtion(){}
}

调用构造函数 new 构造函数名();



3.构造函数写法
  function Programmer (name,age,sex){
             this.name = name;
             this.age =age;
             this.sex = sex;
             this.sing =function(){
                 alert('敲代码');
             }
         }
         var wangmiao = new Programmer('汪苗',18,'男');
         console.log(wangmiao.name);
         wangmiao.sing();



new会在内存中创建一个新的空对象
new 会让this指向这个新的对象
执行构造函数里面的代码  目的:给这个新对象加属性和方法
new会返回这个新对象 (所以构造函数里面不需要return)

1. 函数在定义的时候this是不确定的,只有在调用的时候才可以确定
2. 一般函数直接执行,内部this指向全局window
3. 函数作为一个对象的方法,被该对象所调用,那么this指向的是该对象(谁调用指向谁)
4. 构造函数中的this  对象的实例 


for (变量 in 对象名字) {
    变量输出的是属性名
    对象[变量]输出的是 属性值
}

 这个变量是自定义 符合命名规范  但是一般我们 都写为 k  或则  key

后面的是对象 可以  数组     因为 数组也属于对象



对象的遍历: for-in

  
         function Yingxiong(name,type,blood){
             this.name = name;
             this.type = type;
             this.blood = blood;
             this.singgj=function(){
                 alert('攻击');
             }
         }
         var houyi = new Yingxiong('后裔','射手型','2333血量');
        /*  console.log(houyi.name);
         houyi.singgj();
         console.log(houyi); */
         for (var key in houyi){
             console.log('属性名:'+key+'	 '+'值是:'+houyi[key]);
             
         }


1. JSON 数据的书写格式是:名称/值对。

2. 里面的属性和值都要用 双引号 括起来


 var json = {
     "id": "1",
     "name": "andy",
      "age": "18",
      "tel": "110120"
 }
 for (var k in json) {
    console.log(k); // 这里的k 是属性名
    console.log(obj[k]); // 这里的 obj[k] 是属性值
}

Math.PI            // 圆周率
Math.floor()             // 向下取整
Math.ceil()             // 向上取整
Math.round()        // 四舍五入版 就近取整   注意 -3.5   结果是  -3 
Math.abs()        // 绝对值
Math.max()/Math.min()    // 求最大和最小值
Math.sin()/Math.cos()    // 正弦/余弦
Math.power()/Math.sqrt()// 求指数次幂/求平方根

Math.random 生成随机数

function getRandom(min, max) {
   return Math.floor(Math.random() * (max - min + 1) + min);
}
console.log(getRandom(10, 20))


随机背景颜色

function getRandom(min, max) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

function getRandomColor() {
    var c1 = getRandom(0, 255);
    var c2 = getRandom(0, 255);
    var c3 = getRandom(0, 255);
    return 'rgb(' + c1 + ', ' + c2 + ', ' + c3 + ')';
}

window.onload=function(){
    document.body.style.backgroundColor=getRandomColor();
}


Date 对象基于1970年1月1日(世界标准时间)起的毫秒数。
// 获取当前时间,
var now = new Date();
console.log(now);

+new 获得当前毫秒数 列如:
    
var now = +new Date();
console.log(now);

新方法获得当前毫秒数 console.log(Date.now());


Date构造函数的参数
// 括号里面时间 ,就返回 参数里面的时间
日期格式字符串  '2015-5-1'     new Date('2015-5-1')  或者  new Date('2015/5/1') 

getFullYear()  

获取当年               

         dObj.getFullYear()


getMonth()

+1      获取当月(0-11)输入数值类型要少一个月

                 dObj.getMonth()


getDate()      

获取当天日期                    

dObj.getDate()


getDay()

       获取星期几 (周日0 到周六6)

    dObj.getDay()


getHours()

     获取当前小时

                    dObj.getHours()


getMinutes()   

获取当前分钟                     

dObj.getMinutes()


getSeconds()

   获取当前秒钟                    

dObj.getSeconds()


现在时间
function getMyDate() {
    var arr = ['星期天', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
    var date = new Date();
    // 2018年5月29日 星期二 
    var str = date.getFullYear() + '年' + (date.getMonth() + 1) + '月' + date.getDate() + '日 ' + arr[date.getDay()];
    return str;
}
console.log(getMyDate());

当前时间案列

function getTimer() {
    var date = new Date();
    // var str = date.getHours() + ':' + date.getMinutes() + ':' + date.getSeconds();
    var h = date.getHours();
    var m = date.getMinutes();
    var s = date.getSeconds();
    // if(h < 0) {
    //     h = '0' + h;
    // }
    h = h < 10 ? '0' + h : h
    m = m < 10 ? '0' + m : m
    s = s < 10 ? '0' + s : s
    return h + ':' + m + ':' + s;
}
console.log(getTimer());

- 计算公式:

  
       d = parseInt(countTime/ 60/60 /24); // 计算天数
                d = d < 10 ? '0'+ d : d
         h = parseInt(countTime/ 60/60 %24); // 计算小时
                h = h < 10 ? '0'+ h : h
         m = parseInt(countTime /60 %60 ); // 计算分数
                m = m < 10 ? '0'+ m : m
         s = parseInt(countTime%60);  // 计算当前秒数 
                s = s < 10 ? '0'+ s : s
            return '还剩下'+ d + '天' + h + '时' + m + '分' + s +'秒';

d = parseInt(总秒数/ 60/60 /24); // 计算天数

 
h = parseInt(总秒数/ 60/60 %24) // 计算小时

  
m = parseInt(总秒数 /60 %60 ); // 计算分数

    
s = parseInt(总秒数%60);  // 计算当前秒数



倒计时天数:


function getCountTime(endTime){
    var d, h, m , s;
    var countTime = parseInt((new Date(endTime)- new Date())/1000);
        d = parseInt(countTime/ 60/60 /24); // 计算天数
                d = d < 10 ? '0'+ d : d
        h = parseInt(countTime/ 60/60 %24); // 计算小时
                h = h < 10 ? '0'+ h : h
        m = parseInt(countTime /60 %60 ); // 计算分数
                m = m < 10 ? '0'+ m : m
        s = parseInt(countTime%60);  // 计算当前秒数 
                s = s < 10 ? '0'+ s : s
            return '还剩下'+ d + '天' + h + '时' + m + '分' + s +'秒';-
}
console.log(getCountTime('2018-10-8 12:00'));

创建数组对象的两种方式

- 
字面量方式
- new Array()



instanceof     检测是否为数组
var arr = [1, 23];
var obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false

筛选
var arr = [1500, 1200, 2000, 2100, 1800];
var newArr = [];
for (var i = 0; i < arr.length; i++) {
    if (arr[i] < 2000) {
        newArr.push(arr[i]);
    }
}
console.log(newArr);

升序公式sort冒泡)
var arr = [1, 64, 9, 6];
arr.sort(function(a, b) {
    return b - a; // 降a序
    // return a - b;   升序
});
console.log(arr);

连接数组concat

var arr1 = [1, 2];
var arr2 = ['pink', 'red'];
var arr3 = ['andy', 18]; 
//返回连接之后的新数组
console.log(arr1.concat(arr2, arr3)); 

        1.indexOf(要查找的字符,开始位置)  开始位置不写默认从0开始,找不到返回-1  ----查找字符

        2.charAt(字符位置)      给一个位置,返回该位置的字符                   ----获取字符

        3.subStr(开始位置,截取个数)  返回截取的字符串结果                     ----截取字符

        4.replace(要替换的字符,替换的新字符)                                  ----替换字符

        5.join(连接符)  将数组通过连接符连接,返回字符串                       ----连接字符

        6.split(连接符) 将字符根据连接符分割成多个值的数组,返回数组             ----分割字符

        7.toUpperCase()  将字符串转换为大写                                  ----转换成大写

        8.toLowerCase()  将字符串转换为小写                                  ----转换成小写

把数字 转换字符串
toString()

把数组转换成字符串,逗号分隔每一项

返回一个字符串

join('分隔符')

方法用于把数组中的所有元素转换为一个字符串。

返回一个字符串


var arr = ['red', 'green', 'blue', 'pink'];
console.log(arr.join()); // 跟toString() 一样, 转换为字符串
console.log(arr.join('-')); //red-green-blue-pink


splice()        

数组删除splice(第几个开始,要删除个数)

返回被删除项目的新数组  注意,这个会影响原数组

slice()         

数组截取slice(begin, end)

          返回被截取项目的新数组

concat()  合并         

连接两个或多个数组  不影响原数组

返回一个新的数组

reverse()翻转数组        

颠倒数组中元素的顺序,无参数

        该方法会改变原来的数组    返回新数组


sort()

    升序(降序)冒泡       对数组的元素进行排序           

       该方法会改变原来的数组  返回新数组


push(参数1)              末尾添加一个或多个元素 ,注意修改原数组  并返回新的长度
pop()                     删除数组最后一个元素,把数组长度减 1  无参数、注意修改原数组  返回它删除的元素的值
unshift(参数1...)         向数组的开头添加一个或更多元素,注意修改原数组,  并返回新的长度
shift()                把数组的第一个元素从其中删除,把数组长度减 1 无参数、注意修改原数组,返回第一个元素的值

splice()            删除某个元素 可以替换或者插入元素   插入splice(0,0,'值') splice(2,0,'值')第2中间插入 
splice(2,1,'值') 替换元素

清空数组
var arr = [1,2,3,4,5];
arr = [];

indexOf                   查询元素位置   从左到右查询
lastIndexOf               查询元素位置 从右到左查询
indexOf()

            数组中查找给定元素的第一个索引

如果存在返回索引号  如果不存在,则返回-1。


查找全部
var arr = ['red', 'green', 'blue', 'pink','blue'];
var index = arr.indexOf('blue');
while (index !== -1){
    console.log(index);
    index = arr.indexOf('blue',index + 1);
    
}

编写一个方法去掉一个数组的重复元素
var arr=['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'];
var newArr=[];
for(var i = 0; i< arr.length;i++){
    if(newArr.indexOf(arr[i])=== -1){
        newArr.push(arr[i]);
    }
}
console.log(newArr);


值类型当参数,传递的是复制一份,相互之间不影响
 引用类型参数,传递的是同一份地址,一个人修改, 大家都修改.

后台传数据

function params (url){
            var arr = url.split('?');
           // console.log(arr);
            var params = arr[1];
            //console.log(params);
            var arr1 = params.split('&');
            //console.log(arr1);  
            var o = {};
            for(var i = 0; i< arr1.length;i++){
                //console.log(arr1[i]); 
                var newArr = arr1[i].split('=');
               // console.log(newArr);
                
                o[newArr[0]]=newArr[1];
            }
            return o ;
            
        }
        //params('http://www.itheima.com/login?name=zs&age=18');
        console.log(params('http://www.itheima.com/login?name=zs&age=18'));

forEach遍历
var arr1=[1,3,5,61,8];
arr1.forEach(function(item){
console.log(item);
})


// forEach遍历 箭头函数
arr1.forEach(item=>{console.log(item)});
arr1.forEach(item=>console.log(item))



//each遍历
$(function(){
$('li').each(function(index,ele){
console.log(this);
// console.log(index);
// console.log(ele);
$(this).css({'color':"red"})
})
})




arr1.map(function(item){
return item*2;
})
console.log(arr1);


arr1.forEach()


Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。

</body>
</html>
原文地址:https://www.cnblogs.com/tuziling/p/10074391.html