Javascript基础知识(一)
前言
前端开发最基本的就是HTML + CSS + JS了,刚入行时听到的介绍就是,写页面亦如造房子,HTML为搭户型,CSS是房屋装饰,JS则好比是水电安装,是最后的功能了。 下面我们开始装水电了.....
ECMAScript 和 JavaScript关系
ECMAScript是由欧洲计算机制造商协会(European Computer Manufacturers Association)颁布的关于JavaScript的语言规范,即JS的发展是以ECMAScript为标准进行的。自1997年发布首版以来,已经历经N多版,好像我还在百度搜索let、const等ES6语法时,听说现在倏的就ES10都出草案了!目前个人开发主要是 ES5/6。ECMAScript版本历史
Javascript基础语法
1. 输出
window.alert('hello guys!')//弹出警告窗 document.write('I am contents.');//将内容写到HTML文档中 console.log('我在控制台输出!','others');//将内容输出到浏览器控制台 console.log('Let us play %s this %s !','basketball','friday');//%s 字符串占位符===> // 'Let us play basketball this friday' var familyInfo = { name:'前端牛逼', id:666 } console.log('家族ID是 %d,家族信息是 %O',1235,familyInfo)//%d 整数占位符 %O对象占位符 //当然,如果觉得这样的log输出有点“脱裤子放屁”,还是直接如下不用占位符吧 console.log('家族ID是:',familyID ,'家族信息是',familyInfo); //有一些用的相对少些的Log输出: console.debug(object) //在控制台输出一条消息,包含一个指向代码调用位置的超链接。假如是直接在控制台输入该命令,//就不会出现超链接(和console.log()一样)。 console.info(object) //在控制台输出一条带有“信息”图标的消息和一个指向代码调用位置的超链接。 console.warn(object) //在控制台输出一条带有“警告”图标的消息和一个指向代码调用位置的超链接。 console.error(object) //在控制台输出一条带有“错误”图标的消息和一个指向代码调用位置的超链接。 console.dir(object) //以列表形式输出一个对象的所有属性,有点和你查看DOM窗口相类似。
2.运算
var num = (5 + 2)*10; // 70 = + - * / %(取膜 ) ++ -- 10%3// 1 //注意一下这两个区别 var i = 0; var num = i++;//0 var num1 = ++i;//1 //比较运算 var count = 0; if(count > 0){console.log('num 大于 0')}// JS比较运算符中: == === !== != < > null == undefined //true null === undefined //false
//逻辑运算符 // && and (2 < 10 && 3 > 1) //true // || or (a || b) //只要一个为true,结果即为true // ! not var num = 0; !num //true(将num转换为布尔值再取反);
3.javascript 关键字和保留字(备胎咯)
关键字 (用于标识要执行的操作): break、case、catch、continue、default、delete、do、else、finally、for、function、
if、in、instanceof、new、return、switch、this、throw、try、typeof、var、void
保留字(当前的语言版本中并没有使用,但在以后 JavaScript 扩展中会用到):abstract
boolean、byte、char、class、const、debugger、double、enum、export、extends、final、float、goto、implements、import、int
4.注释
//单行注释 //console.log('num'); alert('error') // 单行末注释 //块注释 /* document.getElementById("myH1").innerHTML="Welcome to my Homepage"; document.getElementById("myP").innerHTML="This is my first paragraph."; */
5.条件语句
if(isVVmusic){ //客户端内 }else{ //端外 } if(sex == '男'){ console.log('小哥哥') }else if(sex == '女'){ console.log('小姐姐') }else{ console.log('萨瓦迪卡~') } switch(res.retCode){ case 1000: console.log('创建活动成功!') break; case 1001: console.log('不在申请时间内!') break; case 1002: console.log('userID不存在!') break; default: console.log('参数不正确'); } //有一种情况可能只是要根据条件去取一个值,比如toast的提示文案,这时用条件判断显得裹脚布又长又臭的时候,可以考虑另一种方式比如: var toastTexts = { '1000':'创建活动成功!', '1001':'不在申请时间内!', '1002':'参数不正确', '1003':'userID不存在!', '1008':'比赛以结束', ...... } if(res && res.retCode){ let toast = toastTexts[res.retCode]; alert(toast); }
6.循环语句
- for - 循环代码块一定的次数
for (语句 1; 语句 2; 语句 3){
被执行的代码块
}
语句 1 (代码块)开始前执行
语句 2 定义运行循环(代码块)的条件
语句 3 在循环(代码块)已被执行之后执行
for (var i =0 ;i<list.length;i++){ var item = list[i]; console.log(item.name); }
- for/in - 循环遍历对象的属性
var res = { name:'刘德华', age:50, place:'hongkong' } for (var key in res){ console.log('%O : %O',key,res[key]); }
- while - 当指定的条件为 true 时循环指定的代码块
var i =0; while (i<5) { if(i === 2) break; console.log('当前数字是'+ i); i++; }
- do/while - 同样当指定的条件为 true 时循环指定的代码块
do/while 循环是 while 循环的变体。该循环会在检查条件是否为真之前执行一次代码块,然后如果条件为真的话,就会重复这个循环。
var i = 0; do{ console.log('number is '+ i) i++; } while (i<5);
break 语句用于跳出循环。(不可以用于es6的forEach)
continue 用于跳过循环中的一个迭代。
JavaScript数据类型
Javascript的数据类型可以分为:基本数据类型(值类型)和引用数据类型
值类型(基本类型):
- 字符串(String)
- 数字(Number)
- 空(Null)
- 未定义(Undefined)
- 布尔(Boolean)
- Symbol(*Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值)
引用数据类型:
- 对象(Object)
- 数组(Array)
- 函数(Function)
从上图可以看出,基本数据类型保存的是具体的值,当将a变量的值赋值给b变量,b变量之后的任何 操作就和a无关了;而当把引用数据类型的值赋值给些个( C、D )变量,C得到的是一个引用地址,同样D也是,当操作C或者D中某一个的属性时,实际上是顺着这条同样的引用地址改了堆内存中的值,因此其它引用了这一相同地址的变量再取自身当中某属性值时,都是被更改过的。
判断数据类型
typeof 123 //'number' typeof 'abc' //'string' typeof true //'boolean' typeof undefined //'undefined' typeof null //'object' typeof { } //'object' typeof [ ] //'object' typeof console.log //'function'
各类型常用的操作方法
1.String
- charAt 获取字符串中指定位置的字符,若指定位置没有,则返回空字符串
'let us play basketball!'.charAt(0);//'l' 返回索引位置0处的字符 'let us play basketball!'.charAt(100000);// '' 如果参数 大于 'string'.length-1 (找不到)即返回 ''
- charCodeAt 获取字符串指定位置字符的unicode编码
'let us play basketball!'.charCodeAt(1);// 101 'let us play basketball!'.charCodeAt(1000) //NaN 如果参数 大于 'string'.length-1 (找不到)即返回 NaN
- fromCharCode() 可接受一个或多个Unicode值,然后返回一个字符串。
String.fromCharCode(97, 98, 99, 100, 101); //'abcde'
- indexOf(string,start)用来检索指定的字符串值在字符串中首次出现的位置。它可以接收两个参数,string表示要查找的子字符串,start表示查找的开始位置,省略的话则从开始位置进行检索。
'let us play basketball!'.indexOf('us');// 4 'let us play basketball!'.indexOf('us',5);// -1 找不到则返回-1
- lastIndexOf(string) 与indexOf类似,它返回的是一个指定的子字符串值最后出现的位置,其检索顺序是从后向前
'let us play basketball!'.lastIndexOf('b');// 18 'let us play basketball!'.lastIndexOf(' ',5);// 3 从索引为5处开始往前查找
-search(substr/regexp) 检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。它会返回第一个匹配的子字符串的起始位置,如果没有匹配的,则返回-1。
'let us play basketball!'.search('us');// 4 'let us play basketball!'.search(/us/);// 4 'let us play basketball!'.search(/usb/);// -1
- subString(start,end) 从start位置截取到end位置截取字符串
'let us play basketball!'.substring(4,6);// 'us' //注意是包括开始项位置,不包括结束项位置 'let us play basketball!'.substring(7);// "play basketball!" //第二个参数不传,则默认截取到最后一位 'let us play basketball!'.substring(1000);//'' 参数大于字符串length时返回 ""
- slice(start,end) 与substring()方法非常类似,它传入的两个参数也分别对应着开始位置和结束位置。而区别在于,slice()中的参数可以为负值,如果参数是负数,则该参数规定的是从字符串的尾部开始算起的位置。也就是说,-1 指字符串的最后一个字符。
'let us play basketball!'.slice(0,3);// 'let' 'let us play basketball!'.slice(-5,-1);// 'ball' //截取顺序依然是从左到右
- replace(string/regexp,string) 字符串替换 第一个参数可以是字符串也可以是正则,将匹配到的内容用第2个参数替换掉
'let us play basketball!'.replace('us','me');// "let me play basketball!" 'let us play basketball!'.replace(/basketball/,'baseball');// "let us play baseball!" 'let us play basketball!'.replace(/ /g,'--');// "let--us--play--basketball!" 利用g修饰符全部替换
- split('') 按某字符将整个字符串拆分成数组,参数为字符串或者正则
'let us play basketball!'.split(' ');//["let", "us", "play", "basketball!"] 'let us play basketball!'.split(/ /);//["let", "us", "play", "basketball!"]
- toLowerCase()和toUpperCase() 将字符串转换成全部大写或者全部小写
'let us play basketball!'.toUpperCase();//LET US PLAY BASKETBALL!"
2.Array
- push(arg1,arg2,arg3) 向数组后面依次添加新的一项,返回的是新数组的长度
var arr1 = [1,2,3]; arr1.push(3,4,5);//6 console.log(arr1);//[1, 2, 3, 3, 4, 5]
- pop() 删除数组最后一项,并且返回该项
var arr1 = [1,2,3]; arr1.pop();//3 console.log(arr1);//[1, 2]
- shift() 删除数组第一项,并且返回该项
var arr1 = [1,2,3]; arr1.shift();//1 console.log(arr1);//[2,3]
- unshift() 向数组开头添加一项,并且返回新数组长度
var arr1 = [1,2,3]; arr1.unshift(0);// 4 console.log(arr1);//[0,1,2,3]
- concat() 将多个数组拼成一个新的数组,并返回新数组
var arr1 = [1,2,3], arr2 = [4,5,6], arr3; arr3 = arr1.concat(arr2); console.log(arr1);// [1,2,3] console.log(arr2);//[4,5,6] console.log(arr3);//[1,2,3,4,5,6]
- join() 把数组中的每一项 按照指定的分隔符拼接成字符串
var arr1 = ['let','us','play','basketball']; var str1 = arr1.join(' '); console.log(str1);//"let us play basketball"
- splice 删除数组中的任意项 返回值是被删除的数组项(会改变原数组)
var arr1 = ['let','us','play','basketball']; var arr2 = arr1.splice(0,2); console.log(arr1);// ["play", "basketball"] console.log(arr2); //["let", "us"]
- slice:复制数组 返回值是复制到的新数组 写上数值之后 不包含被复制的最后一项(不改变原数组)
var arr1 = [1,2,3,4,5,6]; var arr2 = arr1.slice(1,3); console.log(arr1);// [1, 2, 3, 4, 5, 6] console.log(arr2); // [2, 3] 也是包括开始位置项,不包括结束位置项
- reverse:倒序数组 返回值倒序数组 (原有数组改变)
var arr1 = ['a','b','c','d']; var arr2 = arr1.reverse(); console.log(arr1);//["d", "c", "b", "a"] console.log(arr2);//["d", "c", "b", "a"]
- sort 数组排序
var arr1 = [1,5,6,8,2]; arr1.sort(function(a,b){return a-b});//[1, 2, 5, 6, 8] 升序 arr1.sort(function(a,b){return b-a});// [8, 6, 5, 2, 1] 降序
3.Object
- hasOwnProperty():返回一个布尔值,表示某个对象是否含有指定的属性,而且此属性非原型链继承。
var obj1 = {name:'kobe',age:18}; obj1.hasOwnProperty('name');//true obj1.hasOwnProperty('height');//false
- isPrototypeOf():返回一个布尔值,表示指定的对象是否在本对象的原型链中。
var Plays = function(obj){ this.name = obj.name; this.age = obj.age; } var player1 = new Plays({name:'kobe',age:18}); console.log(Plays.prototype.isPrototypeOf(player1));//true
- propertyIsEnumerable():判断指定属性是否可枚举。
var obj1 = {a:1}; obj1.propertyIsEnumerable('a');//true obj1.propertyIsEnumerable('__proto__');//false
- toString():返回对象的字符串表示。
var obj1 = {a:1}; obj1.toString();//"[object Object]"
- watch():给对象的某个属性增加监听。
- unwatch():移除对象某个属性的监听。
- valueOf():返回指定对象的原始值。
4.Number
- toFixed(x)——把数字转换为字符串,x为小数点后位数
10.235233.toFixed(1);///10.2
- toPrecision(x)——把数字格式化为指定的长度
23.3336.toPrecision(2);//23 111.toPrecision(2); //Uncaught SyntaxError: Invalid or unexpected token
- valueOf()——返回值
var boo = new Boolean(false) document.write(boo.valueOf());//false
以上就是我的分享内容了!