JQuery中的JavaScript第二章

一.基本要素

javascript语法的基本要素是:•区分大小写  •变量不区分类型  •每条语句结尾可以省略分号  

•注释与c/c++/java/php相同  •代码段要封闭

二.变量和数据类型

javascript是弱类型脚本语言?声明变量时无需指定变量的数据类型。

将什么类型的赋值给变量,该变量就是什么类型的。javascript是解释时动态决定的,数据保存在内存时也是有数据类型的。

1.变量定义

<script>
name="lcl";//隐式定义
var name="lcl";//显示定义
alert(name);
</script>
注意:变量定义也要遵循一定的规则: 首字母必须是字母(大小都可)、下划线、美元符号;余下的字母可以是任意字母和数字,特殊符号只能是下划线和美元符号;变量名不能使用关键字命名。 注意:  var name 和var Name 是两个不同的变量名。
注意:在定义变量名的时,不能使用ECMAScript关键字和保留字。

2.数据类型

注意:空类型null与未定义类型undefined的区别? 未定义会占用内存,而空不会。


补充:typeof xxx 或者 typeof(xxx)用于检测xxx是什么数据类型,其返回值是字符串
这就解释了为什么返回是string而不是String。
ipt中的所有事物都是对象,包括字符串、数值、数组、函数等。
因为数据类型而确定了javascript内置的几大对象就是String、Nmuber、Boolean、Array、Object,除此之外还提供了正则表达式对象RegExp,日起对象Date、函
javascript的数据类型有8个,分别已经在上述陈述,
javascr数对象Function、静态数学对象Math。

注意:
1.Null和undifined没有对应的内置对象,只有在赋值和对比时使用;
2.除了Math对象,其他内置对象都可以使用new关键字构造;
3.常见的window对象和document对象不是javascript内置对象,而是由浏览器BOM和DOM提供,
在Node.js等非浏览器环境下是无法调用的;
4.数字对象接受十进制数,接受以0开头的八进制数(023420),接收以0x开头的十六进制数(0x2710),接收科学计数(le4)
5.[]也可以表示创建一个新数组对象Array
6.{}也可以表示创建一个新对象Object
7.对象通过中括号运算符能够创建任意名称的对象成员
用法:

<script>
//var a1='123';a2="123",a3=123,a4=true;
//alert(a1+a2);//加号表连接 //123123
//alert(a1+'\n'+a2);//123 123
//alert(typeof a1+'\n'+typeof a2+'\n'+typeof a3+'\n'+typeof a4);
////string string number boolean
//var q1;
//alert(q1);//undifined
//var q2=null;
//alert(typeof q2);//object,一种特殊的Object类型
//var arr=[];
//alert(typeof arr);//object,数组也是对象类型之一
var a2='qwe';
a2=Number(a2);
alert(a2);//NaN
alert(typeof a2);//number
</script>
<script>
//****************javascript常见的语法技巧
alert('<span class="z3s"></span>'==='<span class=\"z3s\"></span>');//返回是true
//在javascript中反斜线表转义:\n换行 \t制表符 \'单引号 \"双引号 \\反斜线 \\\\两个反斜线
//a b 交换数值
var a=1,b=3;
a=[b,b=a][0];
alert('a='+a+'\n'+'b='+b);//a=3 b=1
//合并数组
array1=[1,true,'hello'];
alert(Array.prototype.push.apply(array1,[1,false,'world']));//返回是6
alert(array1);//返回是1,true,hello,1,false,world
alert(Array);//function Array() { [native code] }
//javascript中每个对象都有prototype属性,其解释为:返回对象类型原型的引用
//push表示在数组后面添加一个或多个元素,并返回新的长度。
//apply()是指函数的调用,跟call很类似
</script>
3.数据类型的转换

a.将字符串转换成整型。

用法:

<script>
var a='12red';a=parseInt(a);
var b='lcl';b=parseInt(b); not a number
var c='12.1';c=parseInt(c);
var d='0xF';d=parseInt(d);
alert(a+'\n'+b+'\n'+c+'\n'+d);
</script>


b.将字符串转换成浮点型。

用法:

<script>
var a='red12';a=parseFloat(a);
var b='12red';b=parseFloat(b);
var c='lcl';c=parseFloat(c);
var d='12.1';d=parseFloat(d);
var e='12.12.1';e=parseFloat(e);
var f='0xf';f=parseFloat(f);
alert(a+'\n'+b+'\n'+c+'\n'+d+'\n'+e+'\n'+f);
</script>


4.字符串

a.字符串的创建

用法:

<<script>
//****************第一种:创建字符串有:字面量形式
var str='lcl';
alert(str+'\n'+typeof str);//lcl string
//只要是字面量形式创建的任何类型都是var定义后的类型
//****************第二种:使用new关键字创建
var str1=new String('lcl');
alert(str1+'\n'+typeof str1);//lcl object
//只要是new关键字创建的类型都是对象类型
</script>


b.字符串常用的方法和属性

用法:

<script>
//**********************字符串属性:length
var str='weqrqdhwufhi美djifdioad';
alert(str.length+'\n'+str[3]);//22 //r
//有length就可以有下标,有下标就可以遍历
for(var i=0;i<str.length;i++){
if(str[i]=='美'){
alert(str[i]+'\n'+i);//美 //12
}
}
</script>
<script>
var test='lcl_qwe_LCL',test1=' l c l ';
document.write(
'1:\n'+test.length+ '<b style="font-size:30px">丨</b>'
+'2:\n'+test.charAt(3)+'<b style="font-size:30px">丨</b>'
+'3:\n'+ test.indexOf('c')+ '<b style="font-size:30px">丨</b>'
+'4:\n'+test.indexOf('c',3)+'<b style="font-size:30px">丨</b>'
+'5:\n'+ test.lastIndexOf('c')+ '<b style="font-size:30px">丨</b>'
+'6:\n'+test.replace('lcl','wsf')+'<b style="font-size:30px">丨</b>'
//*************slice()方法中有两个参数(数组中也有该方法,都是一个意思)
//第一个参数代表开始截取的下标:下标从0开始
//第二个参数代表截取到的位置:位置从1开始,截取包含该位置
//slice()中的参数如果是负数,那就是从后往前数,-1,-2,-3...
+'7:\n'+test.slice(2)+'<b style="font-size:30px">丨</b>'
+'8:\n'+ test.slice(3,5)+'<b style="font-size:30px">丨</b>'
+'9:\n'+ test.slice(3,-1)+'<b style="font-size:30px">丨</b><br/>'
//********************substring()方法中的两个参数和slice()方法一样
//唯一的区别是substring()中的参数如果是负数,则会返回整个字符串
+'10:\n'+ test.substring(2,4)+'<b style="font-size:30px">丨</b>'
+'11:\n' + test.substring(-3)+'<b style="font-size:30px">丨</b>'
+'12:\n' + test.toUpperCase()+ '<b style="font-size:30px">丨</b>'
+'13:\n'+test.toLowerCase()+ '<b style="font-size:30px">丨</b>'
+'14:\n'+ test.concat('asd')+'<b style="font-size:30px">丨</b>'
+'15:\n'+ test.match('lcl')+'<b style="font-size:30px">丨</b>'
+'16:\n'+test.match('qqq')+'<b style="font-size:30px">丨</b>'
+'17:\n'+ test.search('LCL')+'<b style="font-size:30px">丨</b>'
+'18:\n' + test.search('asd')
);
//*********************************split()
var split_test=test.split('_');
// for(i=0;i<split_test.length;i++){
// alert(i+'\n'+split_test[i]);
// }
console.log(split_test);
//*********************************trim()
console.log(test1);
console.log(test1.trim());
</script>

<!--******范例:封装一个函数,实现首字母大写的转换-->
<script>
//**********************************第一种方法
var str='the_girl_kissed_the_cat';//TheGirlKissedTheCat
function toUpper(){
//******首先我的思路是:先通过分割符,将该字符串分割成数组
var arr=str.split('_');
var arr1=[];
console.log(arr);//分割成功
//******接着我再遍历每个数组值,每个数组值的首字母都调用toUpperCase(),
// 再把处理后的数组放置在新数组arr1中
for(var i=0;i<arr.length;i++){
for(var j=0;j<arr[i].length;j++){
if(j==0){
arr1.push(arr[i][0].toUpperCase());
}else{
arr1.push(arr[i][j]);
}
}
}
//console.log(arr1);//成功
//********最后再遍历该arr1数组,将每一项打印出来
for(var x=0;x<arr1.length;x++){
document.write(arr1[x]);
}
}
toUpper(str);
//************该方法的确能成功实现,但是消耗资源,不够简便
//**********************************第二种方法
var str1='the_girl_kissed_the_cat';
function toUpper2() {
var arr2=str1.split('_');
var str2="";
for(var i=0;i<arr2.length;i++){
// console.log(arr2[i][0].toUpperCase());//测试成功
str2+=(arr2[i][0].toUpperCase()+arr2[i].slice(1));
}
document.write('<br>'+str2);
}
toUpper2(str1);
</script>


5.正则表达式

正则表达式是对字符串操作的一种逻辑公式,就是用一些事先定义好的一些特定的字符、及这些特东字符的组合,组成一个“规则字符串”,这个规则字符串用来表达对字符串的一种过滤逻辑。

a.创建规则的两种方法:

第一种var reg=/pattern/;   第二种 var reg=new RegExp(‘pattern’);

用法:
<script>
var test='hello world!';
var reg=/hea/;
var exp=new RegExp('world');
alert(reg.exec(test));
alert(reg.test(test));
alert(exp.exec(test));
alert(exp.test(test));
</script>
b.常用的通配符
名称

描述

.

用法:

<script>
var test='lcl';
var reg=/\s/;
alert(reg.test(test));
</script>
<script>
var test='lclo';
var reg=/\bo/;
alert(reg.test(test));
</script>
<script>
var test='lclo';
var reg=/o\b/;
alert(reg.test(test));
</script>
<script>
var test='lcl';
var reg=/[^lcl]/;
alert(reg.test(test));
</script>
<script>
var test='lcl';
var reg=/[a-z]/;
alert(reg.test(test));
</script>
<script>
var test='lcl';
var reg=/(c|a|q)/;
alert(reg.test(test));
</script>
c.常用的量词

用法:

<script>
var test='lco';
//var reg=/c+/; c
//var reg=/oc+/; oc
//var reg=/lc+/; lc
//var reg=/lcc+/; lcc
//**********
//var reg=/ac*/; ac a
//var reg=/lo*/; lo l
// var reg=/clo*/; clo cl
//**********
//var reg=/o?/; o 没有
//var reg=/col?/; col co
alert(reg.test(test));
</script>
<!--如果正则表达式是ab*,则匹配成功的文本是ab或a,因为这时候的b是匹配优先的,而b又是可0和可n个的。-->
<script>
var test='aaaabbcc';
//var reg=/a{2}/; true
//var reg=/a{2,4}/; true
//var reg=/b{3,}/; false
//var reg=/a$/; false
//var reg=/^a/; true
var reg=/$a/; 会怎么样?
alert(reg.test(test));
</script>
d.常用的修饰符

用法:

<script>
var test='asdqwe';
//var reg=/A/i;
//var reg=/q/;当q没有全局查找时,alert返回的都是第一个q,是匹配成功的结果
var reg=/q/g;
// 当q成为全局查找,alert第一个返回的是true,第二个返回的是false
alert(reg.test(test));
alert(reg.test(test));
</script>
<script>
var test='asd\nqwe';
//var reg=/^q/; false
var reg=/^q/m;
alert(reg.test(test));
</script>
<script>
var test='[email protected]';
var reg=/^[0-9A-z]+@(qq|163|sina|)\.(com|cn)$/;
alert(reg.test(test));
</script>
三.常用的运算符

1.数组定义

javascript中的数组定义有三种方法:

<script>
var arr1=[1,'lcl',true];//第1种:定义时直接给数组赋值
document.write(arr1.length+'<br>');
for(var i=0;i<arr1.length;i++){
document.write(arr1[i]+'<br>');
}
/*************************************/
var arr3=[];//第2种:定义一个空数组
var arr3=new Array();//第3种:定义一个空数组并通过索引来赋值
arr3[0]=1;
arr3[1]='lcl';
arr3[2]=true;
document.write(arr3[0]+'\n');
document.write(arr3[1]+'\n');
document.write(arr3[3]+'\n');
</script>
javascript中的数组特点是:数组的总长度是可变的,总长度=数组最大索引+1;同一数组中的数据类型可以互相不同(区别与java);当访问为赋值的数组数据时,该元素的值是undefined,不会数组越界。

2.常用的运算符

用法:
<body>
<script>
//******************************比较运算符
var num1=12,str1='12';
document.write((num1==str1)+'<br>');//true
//因为javascript是弱脚本语言,所有在等于==的时候是可以比较的,但是在恒等于===就不能了
//在恒等于===的时候不仅仅要求值相等,还的要求其二者数据类型也相等
document.write((num1===str1)+'<br>');//false
document.write((num1!=str1)+'\n'+(num1!==str1));//false true
//!=不等 !==恒不等同理
</script>
</body>
<body>
<script>
//**************************一元运算符
//**************i++
var num1=2;
var num=num1++;//首先num=num1 然后num1+1
alert(num+'\n'+num1);//num=2 num1=3
//num++ 先赋值再+1 所有他先赋值给了num再自加1
//****************++i
var num1=2;
var num=++num1;//首先num1+1 然后num=num1
alert(num+'\n'+num1);//num=3 num1=3
//++num1 先+1再赋值 所有他先自加1再赋值给了num
//但是?为什么在遍历的时候,i++和++i都成立??
var arr=[1,2,3,4,5];
for(var i=0;i<arr.length;++i){
alert(arr[i]+'\n');
}
</script>
</body>
<body>
<script>
//**************************位运算符
var num1=25,num2=3;
// alert(num1.toString(2)+'\n'+num2.toString(2));//11001 11
// num1=num1.toString(2),num2=num2.toString(2);
alert(num1&num2);//1
alert(num1|num2);//27
alert(num1^num2);//26
alert(~num1);//-26//否定的含义:实质上就是取负数再-1
//*****************<<左移动运算符
alert((num1<<1).toString(2));//50
//<<表示左移动运算符,向左移空缺的位置以0补全,则11001向左移=》110010,110010就是50
//*****************>>有符号右移动运算符
alert(num1>>1+'\n'+(num1>>1).toString(2));//25??? 12+1+12
alert(Number('\n'));//0
alert((num1>>1)+'\n'+(num1>>1).toString(2));//12 1100
//正数则11001向右移=》01100,那就是12
var num3=-25;//求一个负数的二进制是原码取反+1
alert((num3>>1)+'\n'+(num3>>1).toString(2));//-13 -1101
//对于有符号的右移动运算符,我们要考虑他的作用数值如果是正数,则正常右移动,空缺用0补全
//但如果是负数,则先将负数转化成二进制数,再对其进行右移动,空缺部分用1补全
//*****************>>>无符号右移动运算符
//无符号右移动运算,对于正数,与有符号右移动运算一样。对于负数,无符号右移动用0填充所有空位,
//由于无符号右移动运算的结果是一个32位的正数,所以负数得到的是一个非常大的数字
var num4=-12;
document.write((num4>>>1)+'<br>'+(num4>>>1).toString(2));
</script>
</body>
逗号运算符:只会返回表达式中最右边的值。

var a,b,c,d;
a=(b=2,c=3,d=4);
document.write(a);//a=4
void运算符:强行指定表达式不会返回任何值。

var a,b,c,d;
a=void(b=2,c=3,d=4);
document.write(a);//Undefined
typeof:用于判断某个变量的数据类型。可以当函数使用typeof()、也可以当数据类型来使用。

var a='lcl';
document.write(typeof a+'<br>');
document.write(typeof(a));//string string
instanceof:用于判断某个变量是否是指定的数据类型。

var a=[1,'lcl'];
document.write(a instanceof Array);
document.write(a instanceof Object);
//注意在javascript中所有的对象都是Object的一个实例,由于javascript中没有继承的概念
//所以所有的对象只有一个父类,就是Object。所以对象都是平级的。

猜你喜欢

转载自www.cnblogs.com/rzbwyj/p/10968890.html