day46

一丶javascript介绍

JavaScript的基础分为三个

      1.ECMAScript:JavaScript的语法标准.包括变量,表达式,运算符,函数,if语句,for语句等

      2.DOM:文档对象模型,操作页面上的元素的API.如:让盒子移动

      3.BOM:浏览器对象模型,操作浏览器部分功能的API.让浏览器自动滚动

JavaScript和ECMAScript的关系

ECMAScript是一种由Ecma国际(前身为欧洲计算机制造商协会,英文名称是European Computer Manufacturers Association)制定的标准。

JavaScript是由公司开发而成的,问题是不便于其他的公司拓展和使用。所以欧洲的这个ECMA的组织,牵头制定JavaScript的标准,取名为ECMAScript。

简单来说,ECMAScript不是一门语言,而是一个标准。符合这个标准的比较常见的有:JavaScript、Action Script(Flash中用的语言)。就是说,你JavaScript学完了,Flash中的程序也就轻而易举了。

ECMAScript在2015年6月,发布了ECMAScript 6版本,语言的能力更强(也包含了很多新特性)。但是,浏览器的厂商不能那么快去追上这个标准。

JavaScript的特点

      1.简易易用:可以使用任何文本编辑工具编写,只需要浏览器就可以执行程序

      2.解释执行:事先不编译,逐行执行,无需进行严格的变量声明

      3.基于对象:内置大量现成对象,编写少量程序即可完成目标

二丶js语法

js引入

// 1.内部引入
<script>js代码</script> //2.外部文件引入
<script src='文件名'></script>

变量和赋值

// 变量命名规则:
// 1.只能由英语字母、数字、下划线、美元符号$构成
// 2.能以数字开头,
// 3.并且不能是JavaScript保留字
// 4.变量区分大小写也就是说A和a是两个变量
/* JS保留字
abstract、boolean、byte、char、class、const、debugger、double、enum、export、extends、final、float、goto
implements、import、int、interface、long、native、package、private、protected、public、short、static、super、synchronized、throws、transient、volatile
*/ //将等号右边的值,赋给左边的变量;等号右边的变量,值不变。
var a=100; //定义变量和赋值

注释

​      单行注释 : //

​      多行注释 : /* 内容 1 内容2 */

输入输出

//1. alert:弹出警告框
alert('我是一个弹出框'); //2. console.log("content") : 控制台打印
console.log('在控制台打印'); //3.prompt:输入框
var content=prompt('请输入内容');

三丶数据类型

数值类型:number

​      在JavaScript中,只要是数,就是数值型(number)的。无论整浮、浮点数(即小数)、无论大小、无论正负,都是number类型的。

var num =100;  			//定义一个数值类型变量
console.log(num); //打印num变量
console.log(typeof num); //打印输出类型 //小数保留
var num2=3.1415926;
var newNume2=num.toFixed(2); //保留小数点后2位
console.log(newNum2); // NaN
var num3=NaN; //表示这不是一个数字的变量~~ not a number

字符串类型:string

var a = "abcde";
var b = '路飞'; //不区分单双引号 console.log(typeof a);
console.log(typeof b); // 常用的一些方法:
// .length : 返回一个长度
var str='hello,wordl';
console.log(str.length); // .trim() : 移除两边的空白
var str=' he low ';
console.log(str.trim()); // .trimLeft() : 移除左边空白
console.log(str.trimLeft()); // .trimRight() : 移除右边空白
console.log(str.trimRight()); // .concat(value1,value2) : 末尾拼接字符
var str='hellow';
console.log(str.concat('abcdefg')); // .charAt(n) : n为索引, 根据索引返回字符,索引溢出则返回空字符串
var str='hellow';
console.log(str.charAt(1)): //---> 结果: e
console.log(str.charAt(10)): //---> 结果: '' // .indexOf/search(substring,start) : start是从索引几开始找,没有返回-1
var str='hellow';
console.log(str.indexOf(e)); //---> 1
console.log(str.search(e)); //---> 1 // .substring(start,end) : 从start到end切出来,不支持负数,(一般不用),顾头不顾尾
var str='hellow';
console.log(str.substring(1,3)); // --> e // .slice(start,end) : 从start到end切出来,支持负数,常用 ,顾头不顾尾
var a='abcdef';
console.log(a.slice(1,4)); // -->bcd // .toLowerCase() : 全部变小写
var lower='abcdefg';
console.log(lower.toLowerCase()); // .toUpperCase() : 全部变大写
var lower='ANCDEJ';
console.log(lower.toUpperCase()); // .split(delimiter, limit) : 按照 'delimiter'分隔,切 limit 个 , 如:s1.split(',',2)
var a='a,b,c,d,e';
console.log(a.split(',',3)) ; //--> a b c // .match() : 正则匹配
var a='hello,world'
console.log(a.mathc('world')) //--> world
console.log(a.mathc('WORLD')) //--> NULL
//匹配一次
console.log(a.mathc(/\w+/)) //--> hello
//匹配多次 ,表示多次
console.log(a.mathc(/\w+/g)) //--> hello world // .replac(a,b) : 将a替换成b
var a = '1234567755';
var newStr = a.replace("4567","****");
console.log(newStr);//123****755

布尔值:boolean

​      true: []空数组,{}空对象等

​      false: 0 数字0, '' 空字符串, NaN

空元素:null

var c=null;
console.log(c);

未定义:undefined

var d1;
//表示变量未定义
console.log(typeof d1)

四丶内置对象

数组:Array

/*两种创建方式*/
//方式一:
var colors=['red','color']; // 推荐使用
//方式二:
var colors2=new Array(); //使用构造函数,使用关键字new对构造函数进行创建对象 /*数组的赋值*/
var attr=[];
attr[0]='123';
attr[1]='哈哈'

数组常用的方法

/* .length :返回 数组的大小 */
var attr=[1,2,3];
console.log(attr.lenght);//-->3 /* .push(element) : 尾部追加元素 */
var attr=[1,2,3,4];
console.log(attr.push(5)); /* .pop() 移除尾部元素,并得到返回值 */
var attr=[1,2,3,4];
console.log(attr.pop()); /* .unshift(element) : 头部插入元素*/
var attr=[1,2,3];
console.log(attr.unshift(0)); /* .shift() : 头部删除元素*/
var attr=[1,2,3];
console.log(attr.shift()); /* .slice(start, end) : 切片,顾头不顾尾*/
var attr=[1,2,3];
console.log(attr.slice(1,3)); /* .revers() 翻转, 在原数组上进行改变*/
var attr=[1,2,3];
attr.revers(); /* .join(seq) : 拼接字符串 ,seq是连接符*/
var attr=[1,2,3];
console.log(attr.join('+')); //-->1+2+3 /* .concat(val1,val2) : 连接数组合并,得到一个新的数组,原数组不变*/
var attr=[1,2,3];
console.log(attr.concat('a','b')); // [1, 2, 3, "a", "b"] /* .sort() : 排序: 按照每个元素的第一位的ASCII排序 */
var attr=['gong','da','xd','aq'];
console.log(attr.sort()); /* .splice() #参数:1.从哪删(索引), 2.删几个 3.删除位置替换的新元素(可多个元素) */
var attr=['gong','da','xd','aq'];
attr.splice(1,2,'QQ','MM','DD'); //["gong", "QQ", "MM", "DD", "aq"] /* .toString() : 将数组转换成字符串 */
//直接转换为字符串 每个元素之间使用逗号隔开
var score = [98,78,76,100,0];
var str = score.toString();
console.log(str);//98,78,76,100,0
typeof( str): // string /*Array.isArray(被检测的值):判断是否为数组*/
var a=[];
console.log(Array.isArray(a)); // true
var b='';
console.log(Array.isArray(b)); // false /*.forEach() : 将数组的每个元素传递给回调函数 */
/* .map() :返回一个数组元素调用函数处理后的值的新数组*/

关于sort()的注意:

关于sort()需要注意:
如果调用该方法时没有使用参数,将按字母顺序对数组中的元素进行排序,说得更精确点,是按照字符编码的顺序进行排序。要实现这一点,首先应把数组的元素都转换成字符串(如有必要),以便进行比较。
如果想按照其他标准进行排序,就需要提供比较函数,也就是自己提供一个函数提供排序规则,该函数要比较两个值,然后返回一个用于说明这两个值的相对顺序的数字。比较函数应该具有两个参数 a 和 b,其返回值如下:
若 a 小于 b,在排序后的数组中 a 应该出现在 b 之前,则返回一个小于 0 的值。
若 a 等于 b,则返回 0。
若 a 大于 b,则返回一个大于 0 的值。
示例:
function sortNumber(a,b){
return a - b
}
var arr1 = [11, 100, 22, 55, 33, 44]
arr1.sort(sortNumber)

清除数组的方式

var array = [1,2,3,4,5,6];
array.splice(0); //方式1:删除数组中所有项目
array.length = 0; //方式1:length属性可以赋值,在其它语言中length是只读
array = []; //方式3:推荐

五丶JSON对象

var str1 = '{"name": "chao", "age": 18}';
var obj1 = {"name": "chao", "age": 18}; // JSON字符串转换成对象
var obj = JSON.parse(str1); // 对象转换成JSON字符串
var str = JSON.stringify(obj1);

遍历对象中的内容

	var a={'name':'sb','age':22};
for (var i in a){
console.log(i,a[i]);
}

六丶日期:Date

​      创建日期对象只有构造函数一种方式,使用new关键字

var myDate=new Date();

// 获取一个月中的某一天
console.log(myDate.getDate()); //返回本地时间
console.log(myDate.toLocalString());

常用方法

七丶RegExp对象

//RegExp对象

//创建正则对象方式1
// 参数1 正则表达式(不能有空格)
// 参数2 匹配模式:常用g(全局匹配;找到所有匹配,而不是在第一个匹配后停止)和i(忽略大小写) // 用户名只能是英文字母、数字和_,并且首字母必须是英文字母。长度最短不能少于6位 最长不能超过12位。 // 创建RegExp对象方式(逗号后面不要加空格),假如匹配用户名是只能字母开头后面是字母加数字加下划线的5到11位的
var reg1 = new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$"); //注意,写规则的时候,里面千万不能有空格,不然匹配不出来你想要的内容,除非你想要的内容本身就想要空格,比如最后这个{5,11},里面不能有空格 // 匹配响应的字符串
var s1 = "bc123"; //RegExp对象的test方法,测试一个字符串是否符合对应的正则规则,返回值是true或false。
reg1.test(s1); // true // 创建方式2,简写的方式
// /填写正则表达式/匹配模式(逗号后面不要加空格)
var reg2 = /^[a-zA-Z][a-zA-Z0-9_]{5,11}$/; reg2.test(s1); // true 注意,此处有坑:如果你直接写一个reg2.test(),test里面啥也不传,直接执行,会返回一个true,用其他的正则规则,可能会返回false,是因为,test里面什么也不传,默认传的是一个undefined,并且给你变成字符串undefined,所以能够匹配undefined的规则,就能返回true,不然返回false // String对象与正则结合的4个方法
var s2 = "hello world"; s2.match(/o/g); // ["o", "o"] 查找字符串中 符合正则 的内容 ,/o/g后面这个g的意思是匹配所有的o,
s2.search(/h/g); // 0 查找字符串中符合正则表达式的内容位置,返回第一个配到的元素的索引位置,加不加g效果相同
s2.split(/o/g); // ["hell", " w", "rld"] 按照正则表达式对字符串进行切割,得到一个新值,原数据不变
s2.replace(/o/g, "s"); // "hells wsrld" 对字符串按照正则进行替换 // 关于匹配模式:g和i的简单示例
var s1 = "name:Alex age:18"; s1.replace(/a/, "哈哈哈"); // "n哈哈哈me:Alex age:18"
s1.replace(/a/g, "哈哈哈"); // "n哈哈哈me:Alex 哈哈哈ge:18" 全局匹配
s1.replace(/a/gi, "哈哈哈"); // "n哈哈哈me:哈哈哈lex 哈哈哈ge:18" 不区分大小写 // 注意事项1:
// 如果regExpObject带有全局标志g,test()函数不是从字符串的开头开始查找,而是从属性regExpObject.lastIndex所指定的索引处开始查找。
// 该属性值默认为0,所以第一次仍然是从字符串的开头查找。
// 当找到一个匹配时,test()函数会将regExpObject.lastIndex的值改为字符串中本次匹配内容的最后一个字符的下一个索引位置。
// 当再次执行test()函数时,将会从该索引位置处开始查找,从而找到下一个匹配。
// 因此,当我们使用test()函数执行了一次匹配之后,如果想要重新使用test()函数从头开始查找,则需要手动将regExpObject.lastIndex的值重置为 0。
// 如果test()函数再也找不到可以匹配的文本时,该函数会自动把regExpObject.lastIndex属性重置为 0。 var reg3 = /foo/g;
// 此时 regex.lastIndex=0
reg3.test('foo'); // 返回true
// 此时 regex.lastIndex=3
reg3.test('xxxfoo'); // 还是返回true
// 所以我们在使用test()方法校验一个字符串是否完全匹配时,一定要加上^和$符号,把匹配规则写的确定一些,尽量不用上面这种的写法/xxx/。 // 注意事项2(说出来你可能不信系列):
// 当我们不加参数调用RegExpObj.test()方法时, 相当于执行RegExpObj.test(undefined),然后将这个undefined又转为字符串"undefined",去进行匹配了, 并且/undefined/.test()默认返回true。
var reg4 = /^undefined$/;
reg4.test(); // 返回true
reg4.test(undefined); // 返回true
reg4.test("undefined"); // 返回true

八丶数学相关:Math

常用方法

/* 向上取整 ,'天花板函数' */
var x=1.234;
//天花板函数 表示大于等于 x,并且与它最接近的整数是2
var a=Math.ceil(x);
console.log(a); // 2 /* 向下取整,'地板函数' */
var x=1.234;
//小于等于 x , 并且与它最接近的整数 1
var b=Math.floor(x);
console.log(b); // 1 /* max/min */
console.log(Math.max(2,4)); // 4
console.log(Math.min(2,4)); // 2 /* 随机Math.random() 区间[0,1) */
var ran = Math.random(); //生成随机对象
console.log(ran); // 随机范围[0,1)

查看操作更多对象

九丶数据类型之间的转换

parseInt() :字符串转数字

/* 强制转换类型 */
var a='5';
var a=parseInt(a); // 强转
console.log(typeof(a)); //number /* 自带过滤功能,只保留数字 */
console.log(parseInt('1024社区,真好~~')); //1024 /* 自动带有截断小数的功能:取整,不四舍五入。*/
var a = parseInt(5.8) + parseInt(4.7);
console.log(a);
var a = parseInt(5.8 + 4.7);
console.log(a);

parseFloat() : 字符串转小数

/* 强转完可以做运算 */
var a=parseFloat('5.4')+parseFloat('1.2');
console.log(a); /* 先进性字符串的拼接,在转换成浮点数 ,并自动截取.*/
var a = parseFloat('5.8' + '4.7');
console.log(a);

String()和.toString:转字符串

/* String() */
var s1=123;
var newS1=String(s1);
console.log(typeof(newS1)); /* toString */
var num=234;
console.log(num.toString())

Boolean():任何数据类型都可以转成布尔值

var b1 = '123';  // true
var b3 = -123; // true
var b4 = Infinity; //表示正无穷大 true var b2 = 0; // false
var b5 = NaN; //false
var b6; //表示undefined //false
var b7 = null; //false

十丶运算符

赋值运算符:

比较运算符:

算数运算符:

/* '+': 字符串可相加,数字也可相加,字符串和数字也可以相加。*/
console.log('你好'+'你好'); //你好你好
console.log('吃了'+3); //吃了3 (字符串+数字=字符串) /* '-':字符串与数字之间相减的结果是数字 */
console.log('abc'-1); // NaN
console.log('3'-1); //2
console.log(1-'3'); // -2

逻辑运算符:

​      && 与: 一假必假

      || 或: 一真必真

​      ! 非: 相反

十一丶控制流程

if...else

/*方式一:*/
if (条件){ //代码块 } /*方式二:*/
if (条件){ //代码块 }else{ //代码块 } /*方式三:*/
if (条件1){ // 代码块 }else if(条件2){ // 代码块 }else{ // 代码块 }

switch...case

var gameScore = 'better';

switch(gameScore){
//case表示一个条件 满足这个条件就会走进来 遇到break跳出。如果某个条件中不写 break,那么直到该程序遇到下一个break停止 case 'good':
console.log('玩的很好')
//break表示退出
break; case 'better':
console.log('玩的老牛逼了')
break; case 'best':
console.log('恭喜你 吃鸡成功')
break; // 默认执行,当条件都不成立就执行
default:
console.log('很遗憾')
}

while

/* i++ 后自增 */
var i=0;
while(i<5){
i++; // 先运算,再自增
console.log('a');
console.log(i); } /* ++i 先自增 */
var i=0;
while(i<5){
++i; // 先自增,再运算
console.log('b');
console.log(i);
}

do-while

//不管有没有满足while中的条件do里面的代码都会走一次
var i = 3;//初始化循环变量
do{ console.log(i)
i++;//更新循环条件 }while (i<10) //判断循环条件

for

/* 方式一: */
for(var i = 1;i<=10;i++){
console.log(i)
} /* 方式二: */
var arr = [1,2,3,4,5]
for (n in arr){
console.log(n);
} /* 方式三: */
var arr=[1,2,3]
for (var i=0; i<i.length(); i++){
console.log(arr[i]);
}

三元运算

var a = 1
var b =2
var c = a>b ? a:b //如果a>b成立返回a,否则返回b
console.log(c)

十二丶函数

函数定义和调用

/* 语法 */
function 函数名(形参){
函数体
} /* 调用: */
函数名();

函数的参数和返回值(形参和实参)

​      注意:实际参数和形式参数的个数,要相同。

      注意:函数只能返回一个值,如果要返回多个值,只能将其放在数组或对象中返回。

console.log(sum(3,4));
// 函数: 求和
function sum(a,b){
return a+b;
}

伪数组(arguments)

      arguments代表的是实参。有个讲究的地方是:arguments只在函数中使用

/*返回函数实参的个数:arguments.length*/
function fn(a,b,c) {
console.log(arguments);
console.log(fn.length); //获取形参的个数
console.log(arguments.length); //获取实参的个数
console.log("----------------");
} fn(2,4); //2
fn(2,4,6); //3
fn(2,4,6,8); //4 /*之所以说arguments是伪数组,是因为:arguments可以修改元素,但不能改变数组的长短*/ function fn(a,b) {
arguments[0] = 99; //将实参的第一个数改为99
console.log(a);
console.log(b); arguments.push(8); //此方法不通过,因为无法增加元素
} fn(2,4);
fn(2,4,6);
fn(2,4,6,8);

匿名函数和自执行函数

/* 匿名函数 */
var c=function(){
//函数体
} var v=function(){
console.log(1);
} /* 自执行函数, 立即执行函数,页面加载到这里,这个函数就直接执行了,不需要被调用执行 */
(function(a,b){
return a+b;
})(1,3);

函数的全局变量和局部变量

//局部变量:
在JavaScript函数内部声明的变量(使用 var)是局部变量,所以只能在函数内部访问它(该变量的作用域是函数内部)。只要函数运行完毕,本地变量就会被删除。
// 全局变量:
在函数外声明的变量是*全局*变量,网页上的所有脚本和函数都能访问它。
// 变量生存周期:
JavaScript变量的生命期从它们被声明的时间开始。局部变量会在函数运行以后被删除。全局变量会在页面关闭后被删除。

作用域

      首先在函数内部查找变量,找不到则到外层函数查找,逐步找到最外层。

// 闭包
var city = "BeiJing";
function f(){
var city = "ShangHai";
function inner(){
console.log(city);
}
return inner;
}
var ret = f();
ret(); // ---> ShangHai

JavaScript---js语法,数据类型及方法, 数组及方法,JSON对象及方法,日期Date及方法,正则及方法,数据类型转换,运算符, 控制流程(三元运算),函数(匿名函数,自调用函数)的更多相关文章

  1. Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解

    Jquery遍历筛选数组的几种方法和遍历解析json对象|Map()方法详解 一.Jquery遍历筛选数组 1.jquery grep()筛选遍历数组 $().ready( function(){ v ...

  2. 利用reduce方法,对数组中的json对象去重

    数组中的json对象去重 var arr = [{ "name": "ZYTX", "age": "Y13xG_4wQnOWK1Q ...

  3. JavaScript 基本语法 -- 数据类型 & 变量

    JavaScript都有哪些数据类型呢? 在JavaScript里面,数据类型分为两类:原始类型(primitive type)和对象类型(object type) 1. 原始类型(我的理解,不可分割 ...

  4. jquery遍历筛选数组的几种方法和遍历解析json对象

    jquery grep()筛选遍历数组 $().ready(    function(){        var array = [1,2,3,4,5,6,7,8,9];        var fil ...

  5. JS/Jquery遍历JSON对象、JSON数组、JSON数组字符串、JSON对象字符串

    JS遍历JSON对象 JS遍历JSON对象 <script> var obj = { "goodsid": "01001", "goods ...

  6. PHP空数组转化为json对象的问题

    例子: $a = []; echo json_encode($a); echo json_encode($a, JSON_FORCE_OBJECT); 输出结果: [] {}

  7. 判断list数组里的json对象有无重复,有则去重留1个

    查找有无重复的 var personLength = [{ certType: '2015-10-12', certCode:'Apple'}, { certType: '2015-10-12', c ...

  8. javascript 中检测数据类型的方法

    typeof 检测数据类型 javascript 中检测数据类型有好几种,其中最简单的一种是 typeof 方式.typeof 方法返回的结果是一个字符串.typeof 的用法如下: typeof v ...

  9. 【repost】JavaScript 基本语法

    JavaScript 基本语法,JavaScript 引用类型, JavaScript 面向对象程序设计.函数表达式和异步编程 三篇笔记是对<JavaScript 高级程序设计>和 < ...

随机推荐

  1. centos安装安全狗5步就能完成

    安全狗是为服务器开发的一款服务器管理软件,客户的服务器是centos 64位,我们就来看看如何安装吧.首先必须得有root账号权限,不然下面的步骤可能都无法执行.随ytkah一起来操作吧 1.下载安全 ...

  2. jieba模块

    jieba模块 下载 pip install jieba 使用 import jieba 精确模式 jieba.cut() 直接打印出的是单个文字 转换成列表-->jieba.lcut() im ...

  3. Hibernate框架学习2

    集合映射 public class User { // 一个用户,对应的多个地址 private Set<String> address; private List<String&g ...

  4. mysql数据库锁的机制-及事务事件

    事务隔离级别,脏读.不可重复读.幻读,乐观锁.悲观锁(共享锁.排它锁) 数据库事务具有四个特征,分别是原子性(Atomicity).一致性(Consistency).隔离性(Isoation).持久性 ...

  5. 付哇刷脸支付系统源码V1.03完整安装包.zip

    付哇刷脸支付系统源码是什么? 1.是一款专业的刷脸+聚合支付平台源码系统: 2.支持对接自己的支付宝和微信官方服务商: 3.基于目前流行的WEB2.0的架构(php+mysql),采用自研DOXCX框 ...

  6. TCP/IP协议总结

    TCP/IP网络协议栈分为四层, 从下至上依次是: 链路层 其实在链路层下面还有物理层, 指的是电信号的传输方式, 比如常见的双绞线网线, 光纤, 以及早期的同轴电缆等, 物理层的设计决定了电信号传输 ...

  7. 如何更新GitHub上的代码?

    更新github上的代码 一.克隆代码 1.先是把自己GitHub上的代码克隆到本地(下载到本地) 步骤1.随便创建一个新文件夹(用来存放下载下来的代码) 步骤2.在文件夹中打开cmd 输入下载指令下 ...

  8. 记C# 调用虹软人脸识别 那些坑

    上一个东家是从事安防行业的,致力于人工智能领域,有自主人脸识别.步态识别的算法.C++同事比较称职有什么问题都可以第一时间反馈,并得到合理的处理,封装的DLL 是基于更高性能的GPU算法,可支持更多线 ...

  9. Certification information不能过大

    /* If certification information is too big this event can't be transmitted as it would cause failure ...

  10. 【Gamma】“北航社团帮”发布说明——小程序v3.0

    目录 Gamma版本新功能 小程序v3.0新功能 新功能列表 新功能展示 这一版修复的缺陷 Gamma版本的已知问题和限制 小程序端 网页端 运行.安装与发布 运行环境的要求 安装与发布 小程序 网页 ...