第三章 变量
声明变量
var 变量名;
-
-
字符串 str
-
boolean
-
undefined 未定义的
-
var a = 2; var b = '2' + a;--变成22,转换成字符串拼接 var c = true; console.log(typeof c)---检查数据类型 先声明后定义 var e; console.log(a); --值undefined console.log(typeof a); --类型undefined var f= null; console.log(f); --空值 console.log(typeof f); ---空对象
var arr = [1,2,3]; --长度3,还有索引 console.log(arr);
- object 对象
var obj = {name:'jj',age:19}; console.log(obj); 定义在对象中的函数叫做对象的方法 var obj = {name:'jj',age:19, fav:function(){ console.log(this) #this指的是当前对象obj } }; obj.fav();
- function 函数 函数作用域
#普通函数的声明 function add(a,b){ return a + b } console.log(add(2,4)); #6 #函数表达式 var add2 = function(){ ---匿名函数 }; #自执行函数 (function(){ alert(111) })(); js中只有两个作用域一个是全局作用域,一个是函数作用域
var a= 1; a ++; # a++相当于 a +=1; console.log(a); # 2 var a = 4; 先让a的值赋值给c,在对a++赋值给a var c = a ++; console.log(c); #4 console.log(a); # 5 var a = 4; 先让a的值加在赋值给c,在赋值给a var c = ++a; console.log(c); #5 console.log(a); # 5
var name = 'wusir',age = 28; var str = name + '今年是'+ age +'岁了'; es6的模板字符串`` var str2 = `${name}今年${age}岁了`; console.log(str2);
var arr = [1,'2','alex']; 解释器解释代码时遇到var声明的变量,会把var声明的变量提升到全局作用域下(除了函数之外的变量) for (var i = 0;i <arr.length;i++){ var c = 2; } console.log(c); arr.length;#3
var score = 70; if (score >80){ console.log('可以玩了'); }else{ console.log('继续学习'); }
switch
var weather = prompt('请输入今天的天气'); switch (weather){ case '晴天': console.log('出去玩') break; case '下雨': console.log('睡觉') break; default: console.log('学习') break; }
值比较
var a = 2; var b = '2'; console.log(a == b); # true 比较的是值 console.log(a === b); # false 比较的是值和数据类型 ===比较的是值和数据类型 ==比较的是值
var arr = [8,9,10]; 初始化循环的变量,循环条件,更新循环变量 for (var i = 0;i < arr.length; i++){ console.log(arr[i]); } var a = ; while(a <=100){ console.log(a); a++; }
function fn(){ alert(111); } fn(); 函数的调用可以在任意位置,因为调用提升 function fun(a,b){ console.log(c); # undefined } func(2,3); function fun(){ console.log(arguments); arguments得到实参的个数 } func(2,3,4); 函数的承载:相同的函数名,传入不同的参数,调用不同的方法 function funC(){ console.log(arguments); switch (arguments.length){ case 2: console.log('2个参数') break; case 3: console.log('3个参数') break; } } func(2,3); func(2,3,4);
#自变量创建方式 var obj ={}; obj.name = 'alex'; #点语法 set和get obj.fav = function(){ console.log(this); #alex,当前对象 } obj.fav(); console.log(obj.name); #构造函数创建 var obj2 = new object(); console.log(obj2); obj2.name = 'alex'; --赋值 console.log(this);---window function add(x,y){ console.log(this.name); console.log(x); console.log(y); } add(); add.call(obj,1,2) --call可以改变this指向,从window到obj这个对象,1,2分别给x,y赋值 add.apply(obj,[1,2])--apply也可以改变this指向,赋值是用数组的方式 函数中的this不一定是window,因为可以改变 全局作用域下、函数作用域下、自执行作用域下的this都指向window
var colors = new Array(); r colors = [];
检测是否是数组
var colors = ['red','green','blue']; console.log(Array.isArray(colors)) 返回值是true这是数组 返回值是false 则不是数组
转换方法,调用数组的toString()方法会返回由数组中每个值的字符串形式拼接而成的一个以逗号分隔的字符串。
var colors = ['red','green','blue']; console.log(colors.toString());//red,green,blue
分割字符串,join('') 以什么分割
var colors = ['red','blue','green']; colors.join('||'); //red||blue||green
-
- pop()从数组末尾移除最后一项,减少数组的 length 值,然后返回移除的项 。
var colors = ['red','blue','green']; console.log(colors.push('purple'));返回数组的长度4 var colors = ['red','blue','green','purple']; conlose log(colors.pop());返回删除的内容purple
-
- unshift()方法,往数组的第一个位置添加内容
var colors = ['red','blue','green']; var item = colors.shift();//取得第一项 alert(item); //"red" alert(colors.length); //2 var colors = []; var count = colors.unshift('red','green'); //推入两项 alert(count); //2 console.log(colors); // ["red", "green"]
splice,指定位置添加或者删除
var names = ['女神','wusir','太白']; names.splice(1,0,'日天','包子');表示在索引1这个位置不删除,而是添加日天,包子 names.splice(1,1);返回删除的元素 names.splice(1,1,'alex');替换 conlose log(names);
-
参数为一个或多个数组,则该方法会将这些数组中每一项都添加到结果数组中。
-
var colors = ['red','blue','green']; colors.concat('yello');//["red", "blue", "green", "yello"] colors.concat({'name':'张三'});//["red", "blue", "green", {…}] colors.concat({'name':'李四'},['black','brown']);// ["red", "blue", "green", {…}, "black", "brown"]
-
一个参数的情况下,slice()方法会返回从该参数指定位置开始到当前数组默认的所有项
-
两个参数的情况下,该方法返回起始和结束位置之间的项——但不包括结束位置的项。
-
如果
slice()
方法的参数中有一个负数,则用数组长度加上该数来确定响应的位置。例如,在一个包含5项的数组上调用slice(-2,-1)
与调用slice(3,4)
var colors = ['red','blue','green','yellow','purple']; colors.slice(1);//["blue", "green", "yellow", "purple"] colors.slice(1,4);// ["blue", "green", "yellow"]#顾头不顾尾 var colors = ['red','blue','green','yellow','purple']; colors.slice(-2,-1);//["yellow"] 相当于5-2,5-1即3,4 colors.slice(-1,-2);//[]
位置方法,indexOf()
和 lastIndexOf()
var numbers = [1,2,3,4,5,4,3,2,1]; alert(numbers.indexOf(4)); //3 3 是索引,找到第一个就不找了 alert(numbers.lastIndexOf(4));// 5,从后往前找,但是索引还是从前往后数的 alert(numbers.indexOf(4,4));//5,从索引4开始往后找4, alert(numbers.lastIndexOf(4,4));//3 从索引4开始从后往前找4, var person = {name:"mjj"}; var people = [{name:'mjj'}]; var morePeople = [person]; alert(people.indexOf(person)); //-1 查不到返回值-1 alert(morePeople.indexOf(person));// 0
//执行某些操作 10 var numbers = [1,2,3,4,5,4,3,2,1]; numbers.forEach(function(item, index, array){ });
var stringValue = "hello world"; alert(stringValue.length); //"11"
charAt(),charCodeAt()
var stringValue = "hello world"; alert(stringValue.charAt(1)); //"e" 如果你想得到的不是字符而是字符编码,那么就要像下面这样使用 charCodeAt()了。 var stringValue = "hello world"; alert(stringValue.charCodeAt(1)); //输出"101"
concat()
var stringValue = "hello "; var result = stringValue.concat("world"); alert(result); //"hello world" alert(stringValue); //"hello"
slice(),substring(),substr
var stringValue = "hello world"; alert(stringValue.slice(3));//"lo world" alert(stringValue.substring(3));//"lo world" alert(stringValue.substr(3));//"lo world" alert(stringValue.slice(3, 7));//"lo w" alert(stringValue.substring(3,7));//"lo w" alert(stringValue.substr(3, 7));//"lo worl" #意思取7个字符 var stringValue = "hello world"; alert(stringValue.slice(-3));//"rld" 11-3=8第八个开始 alert(stringValue.substring(-3));//"hello world" alert(stringValue.substr(-3)); //"rld" alert(stringValue.slice(3, -4));//"lo w" alert(stringValue.substring(3, -4));//"hel" alert(stringValue.substr(3, -4)); //""(空字符串)
trim()方法,删除字符串的前后空格
var stringValue = " hello world "; var trimmedStringValue = stringValue.trim(); alert(stringValue); //" hello world " alert(trimmedStringValue); //"hello world"
大小写转换toLocaleUpperCase(),toLocaleLowerCase()
var stringValue = "hello world"; alert(stringValue.toLocaleUpperCase()); //"HELLO WORLD" alert(stringValue.toUpperCase()); //"HELLO WORLD" alert(stringValue.toLocaleLowerCase()); //"hello world" alert(stringValue.toLowerCase()); //"hello world"
var stringValue = "hello world"; alert(stringValue.indexOf("o")); //4 alert(stringValue.lastIndexOf("o")); //7 alert(stringValue.indexOf("o", 6)); //7 alert(stringValue.lastIndexOf("o", 6)); //4
var now = new Date([parameters]); 无参数 : 创建今天的日期和时间,例如: var today = new Date();. 个符合以下格式的表示日期的字符串: “月 日, 年 时:分:秒.” 例如: var Xmas95 = new Date("December 25, 1995 13:30:00")。如果
你省略时、分、秒,那么他们的值将被设置为0。 一个年,月,日的整型值的集合,例如: var Xmas95 = new Date(1995, 11, 25)。 一个年,月,日,时,分,秒的集合,例如: var Xmas95 = new Date(1995, 11, 25, 9, 30, 0); var date = new Date(); date.getDate(); date.getMonth(); Month+1 date.getDay(); date.getHours(); date.getMinutes(); date.getSeconds(); date.toLocaleString() 2018/08/21 21:30:23
-
toDateString()——以特定于实现的格式显示星期几、月、日和年;
-
toTimeString()——以特定于实现的格式显示时、分、秒和时区;
-
toLocaleDateString()——以特定于地区的格式显示星期几、月、日和年;
-
toLocaleTimeString()——以特定于实现的格式显示时、分、秒;
-
-
yDate.toLocaleDateString();//"2020/5/15"
例题 返回了用数字时钟格式的时间
var time = new Date(); var hour = time.getHours(); var minute = time.getMinutes(); var second = time.getSeconds(); var temp = "" + ((hour > 12) ? hour - 12 : hour); if (hour == 0) temp = "12"; temp += ((minute < 10) ? ":0" : ":") + minute; temp += ((second < 10) ? ":0" : ":") + second; temp += (hour >= 12) ? " P.M." : " A.M."; alert(temp);
var str = '123.0000111'; console.log(parseInt(str));--取整123 console.log(typeof parseInt(str)); console.log(parseFloat(str)); console.log(typeof parseFloat(str));--浮点型123.000 console.log(Number(str));
toString
var num = 1233.006; // 强制类型转换 console.log(String(num)); console.log(num.toString()); // 隐式转换 console.log(''.concat(num)); // toFixed()方法会按照指定的小数位返回数值的字符串 四舍五入 console.log(num.toFixed(2));
var color = "red"; function sayColor(){ alert(window.color); } window.sayColor(); //"red"
var max = Math.max(3, 54, 32, 16); alert(max); //54 var min = Math.min(3, 54, 32, 16); alert(min); //3 要找到数组中最大或最小值,可以像下面这样用apply()方法 var values = [1,2,36,23,43,3,41]; var max = Math.max.apply(null, values);null是空对象
-
Math.ceil()
执行向上舍入,即它总是将数值向上舍入为最接近的整数; -
Math.floor()
执行向下舍入,即它总是将数值向下舍入为最接近的整数; -
Math.round()
var num = 25.7; var num2 = 25.2; alert(Math.ceil(num));//26 天花板函数 alert(Math.floor(num));//25 地板函数 alert(Math.round(num));//26 alert(Math.round(num2));//25 四舍五入
random 随机数
Math.random()方法返回大于等于 0 小于 1 的一个随机数 100-400的数 100+math.random()*(400-100) 获取min到max的范围的整数 function random(lower, upper) { return Math.floor(Math.random() * (upper - lower)) + lower; } 产生一个随机的rgb颜色 * @return {String} 返回颜色rgb值字符串内容,如:rgb(201, 57, 96) */ function randomColor() { // 随机生成 rgb 值,每个颜色值在 0 - 255 之间 var r = random(0, 256), g = random(0, 256), b = random(0, 256); // 连接字符串的结果 var result = "rgb("+ r +","+ g +","+ b +")"; // 返回结果 return result; } 获取随机验证码 function createCode(){ //首先默认code为空字符串 var code = ''; //设置长度,这里看需求,我这里设置了4 var codeLength = 4; //设置随机字符 var random = new Array(0,1,2,3,4,5,6,7,8,9,'A','B','C','D','E','F','G','H','I','J','K','L','M','N','O',
'P','Q','R', 'S','T','U','V','W','X','Y','Z'); //循环codeLength 我设置的4就是循环4次 for(var i = 0; i < codeLength; i++){ //设置随机数范围,这设置为0 ~ 36 var index = Math.floor(Math.random()*36); //字符串拼接 将每次随机的字符 进行拼接 code += random[index]; } //将拼接好的字符串赋值给展示的Value return code }