对象 函数 正则表达式

JavaScript基础学习3

创建对象3种方式
1.自变量创建对象

var obj={
uname:'panda',
sex:'男',
age:'18',
}
consolse.log(obj.uname);

在对象字面量中,使用逗号来分隔不同的属性

2.new Object

var obj= new Object();//创建一个空对象;
obj.name='panda'//加入对象中;

3.使用函数创建对象

function 构造函数名(){
    this.属性=;
    this.方法=function(){
    }
}
new 构造的函数名();

//构造函数
function str(yourname,sex,age){
 this.name=yourname;
 this.sex=sex;
 this.age=age;
 this sing=function(sang){
 console.log(sang);
 }
 }
var jay=new str("panda",'男',12);//调用函数返回的是一个对象
jay.sing('b');
//利用构建函数创建对象的过程也成为对象的实例化

构造函数不需要return可以返回结果
构造函数名字首字母大写

new执行过程
1.在内存中创建一个新对象
2.让this指向这个新对象
3执行构造函数里面的代码,给新对象添加属性
4返回新对象

遍历对象
for in

for(变量 in 对象)
 <script>
        var obj=new Object();
        obj.name="panda";
        obj.sex='男';
        obj.habbit='击剑';
        obj.fn=function() {
            console.log();
        }
        for(k in obj){
             console.log(k);//k 变量输出得到是属性名
             console.log(obj[k]);//obj 得到的是属性值
        }
    </script>

查询MDN文档

随机数

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

猜文字游戏

     var random=getRandom(1,10);
    while(true){
        var num = prompt('你来猜?输入1~10之间的一个数字');
        if (num > random){
            alert('你猜大了');
        }else if(num < random){
            alert('你猜小了');
        }else{
            alert('恭喜你猜对了');
            break;
        }
    }
    </script>

Date类型

 var date=new Date();
    console.log(date);

无参数则返回则返回系统当前的时间
参数常用的写法
数字型

var date=new Date(2021,3,22);
    console.log(date);

字符型

var date=new Date('2021-3-22 8:8:8');/* (2021/3/22 写法也可以)
    console.log(date);

日期格式化

getTime() 返回表示日期的毫秒数;与valueOf()方法返回的值相同
setTime(毫秒) 以毫秒数设置日期,会改变整个日期
getFullYear() 取得4位数的年份(如2007而非仅07getUTCFullYear() 返回UTC日期的4位数年份
setFullYear() 设置日期的年份。传入的年份值必须是4位数字(如2007而非仅07setUTCFullYear() 设置UTC日期的年份。传入的年份值必须是4位数字(如2007而非仅07getMonth() 返回日期中的月份,其中0表示一月,11表示十二月
getUTCMonth() 返回UTC日期中的月份,其中0表示一月,11表示十二月
setMonth() 设置日期的月份。传入的月份值必须大于0,超过11则增加年份
setUTCMonth() 设置UTC日期的月份。传入的月份值必须大于0,超过11则增加年份
getDate() 返回日期月份中的天数(131getUTCDate() 返回UTC日期月份中的天数(131setDate() 设置日期月份中的天数。如果传入的值超过了该月中应有的天数,则增加月份
setUTCDate() 设置UTC日期月份中的天数。如果传入的值超过了该月中应有的天数,则增加月份
getDay() 返回日期中星期的星期几(其中0表示星期日,6表示星期六)
getUTCDay() 返回UTC日期中星期的星期几(其中0表示星期日,6表示星期六)
getHours() 返回日期中的小时数(023getUTCHours() 返回UTC日期中的小时数(023setHours() 设置日期中的小时数。传入的值超过了23则增加月份中的天数
setUTCHours() 设置UTC日期中的小时数。传入的值超过了23则增加月份中的天数
getMinutes() 返回日期中的分钟数(059getUTCMinutes() 返回UTC日期中的分钟数(059setMinutes() 设置日期中的分钟数。传入的值超过59则增加小时数
setUTCMinutes() 设置UTC日期中的分钟数。传入的值超过59则增加小时数
getSeconds() 返回日期中的秒数(059getUTCSeconds() 返回UTC日期中的秒数(059setSeconds() 设置日期中的秒数。传入的值超过了59会增加分钟数
setUTCSeconds() 设置UTC日期中的秒数。传入的值超过了59会增加分钟数
getMilliseconds() 返回日期中的毫秒数
getUTCMilliseconds() 返回UTC日期中的毫秒数
setMilliseconds(毫秒) 设置日期中的毫秒数

Function类型
1.声明了两个同名函数,则是后面的函数覆盖了前面的函数。

2.在函数内部,有两个特殊的对象:arguments 和 this。

  • this引用的是函数据以执行的环境对象——或者也可以说是 this 值(当在网页的全局作用域中调用函数时,this 对象引用的就是 window)。
    argumens
    是一个类数组,可以索引来获取数据,也可以获取长度
    在调用函数时我们所传递的实参也可以封装到arguments中
function fun(){
console.log(arguments.length);//获取实参的长度
console。log(arguments[0]);//hello 输出第一个实参
}
fun("hello","1");//2

每个函数都包含两个属性:length 和 prototype。其中,length 属性表示函数希望接收的命名参数的个数,如下面的例子所示。

function sayName(name){ 
 alert(name); 
} 
function sum(num1, num2){ 
 return num1 + num2; 
} 
function sayHi(){ 
 alert("hi"); 
} 
alert(sayName.length); //1 
alert(sum.length); //2 
alert(sayHi.length); //0

立即执行函数
语法

(function(a,b){
console.log("a = "+a);
console.log("b = "+b);
})(10,20);
//"a = 10"
//"b = 20"

调用函数
1.直接调用

//window对象的alert方法
windows.alert("测试代码")

call()和apply()可以将第一个对象指定为第一个参数
此时这个对象会成为函数执行的this
2.call()方法调用
//调用格式
函数引用.call(调用者,参数1,参数2…)
call方法可以将实参在对象之后依次传递

    var each=function(array,fn)
        {
            for(var index in array)
            {
                //以window为调用者来调用fn函数
                //index,array[index]是传给fn函数的参数
                fn.call(null,index,array[index]);
            }
        }   
            each([4,20,3],function(index,ele)
            {
                document.write("第"+ index+"个元素是"+ele+"<br />");
           });
//输出
//第0个元素是4
//第1个元素是20
//第2个元素是3

3.apply()方法调用
apply()方法可以将一个实参封装到一个数组中统一传递


基本包装类型
ECMAScript 还提供了 3 个特殊的引用类型:Boolean、Number 和
String。

//调用 Boolean构造函数并传入 true 或 false 值。
var booleanObject = new Boolean(true);
//调用 Number 构造函数时向其中传递相应的数值。下面是一个例子。
var numberObject = new Number(10);
//使用 String 构造函数来创建。
var stringObject = new String("hello world");

字符String

查找字符位置
1.indexOf()方法从字符串的开头(位置 0)开始向后查找,lastIndexOf()方法则从字符串的末尾开始向前查找。若不存在返回-1.

2.如果有两个参数indexOf(‘要查找的字符’,[起始的位置])

 var str="abkscsdj";
 var index= str.indexOf('d');
 console.log(index);//6
  • charAt(index)根据位置返回字符
var str="andy";
console.log(charAt(3));//y
  • charCodeAt(index)获取指定位置的字符的ASCII码
  • str[index]获取指定位置的字符

遍历字符串字母出现的次数

    var str='acnsksacsa'
    var o={};
    for(var i=0;i<str.length;i++){
      var chars = str.charAt(i);
      if(o[chars])
            o[chars]++;
       else 
            o[chars]=1;
    }
        console.log(o);
        var max=0;
        var ch='';
        for(var k in o)//k是属性名 o[k]是属性值
            if(o[k]>max){
                max=o[k];
                ch=k;
            }
    console.log(max);
    console.log("最多次数的字母"+ch);

输出为

Object { a: 3, c: 2, n: 1, s: 3, k: 1 }
3
最多次数的字母a

替换字符
replace(‘被替换的字符’,‘替换为的字符’)同一字母只会替换第一次出现的

str='andyandy';
console.log(str.replace('a','b');//bndyandy

toUpperCase()转化大写
toLowerCase()转化小写·

基本包装类型
ECMAScript 还提供了 3 个特殊的引用类型:Boolean、Number 和
String。

//调用 Boolean构造函数并传入 true 或 false 值。
var booleanObject = new Boolean(true);
//调用 Number 构造函数时向其中传递相应的数值。下面是一个例子。
var numberObject = new Number(10);
//使用 String 构造函数来创建。
var stringObject = new String("hello world");
function Person(){ 
} 
Person.prototype.name = "Nicholas"; 
Person.prototype.age = 29; 
Person.prototype.job = "Software Engineer"; 
Person.prototype.sayName = function(){ 
 alert(this.name); 
}; 
var person1 = new Person(); 
var person2 = new Person(); 
person1.name = "Greg"; 
alert(person1.name); //"Greg"——来自实例
alert(person2.name); //"Nicholas"——来自原型
delete person1.name; 
alert(person1.name); //"Nicholas"——来自原型

我们知道,arguments.callee 是一个指向正在执行的函数的指针,因此可以用它来实现对函数
的递归调用,例如:

function factorial(num){ 
 if (num <= 1){ 
 return 1; 
 } else { 
 return num * arguments.callee(num-1); 
 } 
}

this指向
1.一般情况下this的最终指向的是调用它那个对象。
2.全局作用域或普通函数中this指向全局对象window。
3.以方法的形式调用时,this是调用方法的对象。
4.以构造函数的形式调用时,this是新创建的那个对象。
5.以call和apply时,this是指定的那个对象。

闭包

闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式,就是在一个函数内部创建另一个函数。
闭包的特点

1、让外部访问函数内部变量成为可能

2、局部变量会常驻在内存中

3、可以避免使用全局变量,防止全局变量污染

4、会造成内存泄漏(有一块内存空间被长期占用,而不被释放)

 //闭包
    function sum(){
        var n=1;
        return function jay(){
            var m=1;
            return function bay(){

            console.log('n'+'='+ n++);
            console.log('m'+'='+ m++);
                }  
        }
    } 
    var a=sum()();
    a();
    a();
    a();

正则表达式
创建正则表达式的对象
语法
var 变量= new RegExp(“正则表达式”,“匹配模式”);
使用typeof检查正则对象,会返回object

正则表达式的方法:
test()
使用这个方法可以用来检查一个字符串是否符合正则表达式的规则
如果符合则返回true,否则返回false


 var jay = new RegExp("a");//表示判断正则表达式中是否含有字母a,区分大小写
 var str = "aBC"; 
 var result=jay.test(str);
 console.log(result);//true
 console.log(jay.test('a'));//true 

在构造函数中可以传递一个匹配模式作为第二个参数
可以是

g:表示全局(global)模式,即模式将被应用于所有字符串,而非在发现第一个匹配项时立即停止;
i:表示不区分大小写(case-insensitive)模式,即在确定匹配项时忽略模式与字符串的大小写;
m:表示多行(multiline)模式,即在到达一行文本末尾时还会继续查找下一行中是否存在与模
式匹配的项。

 var jay = new RegExp("ab","i");//表示判断正则表达式中是否含有字母a,不用区分大小写
 var str = "Ab"; 
 var result=jay.test(str);
 console.log(result);//true

可用字面量创建正则表达式
语法:var 变量=/正则表达式/匹配模式

 var reg=/a/i === var reg("a","i");

语法

  • | 代表或的意思
  • [ ]里面的内容也是或的关系
var reg=/a|b///表示判断正则表达式中是否含有字母a或者b。
var reg=/[ab]/

split可以将一个字符串拆分为一个数组
方法中可以传递一个正则表达式作为参数。
这个方法即使不指定全局匹配,也会也会全部插分

    var str = "1a2b3c4d5e6f7";
	var result=str.split(/[A-z]/);
    console.log(result);//["1","2","3", "4", "5","6","7"]

search()可以搜索字符串中是否含有指定内容,
搜索到指定内容,则返回第一次出现的索引,否则返回-1
他可以接受一个正则表达式,然后根据正则表达式去检索字符串
search只会查到第一个,即使设置全局匹配也不起作用

 var str="hello abc";
 var result=str.search("abc");
 console.log(result);//6

接受一个正则表达式
 var str="hello abc hello afc agc";
 var result=str.seach(/a[efg]c/);//判断是否含有aec或者afc或者agc
 console.log(result);//6

match
可以根据正则表达式,从字符串中将符合条件的提取出来
match可以将匹配的内容封装到一个数组中返回,即使只查询到一个结果

 var str="1a2b3c4d";
 var result=str.match(/[A-z]/);//a
 var result1=str.match(/[A-z}/g);//abcd
 console.log(result);
 console.log(result1[1]);//b

replace()可以将字符串中指定内容替换为新的内容
1.被替换的内容可以接受一个正则表达式作为参数
2.新的内容默认为替换第一个
参数:
1 被替换的内容;
2.替换的内容;(换成空的""字符串时代表删除)

 var str="1a2b3c4d5A";
 var result=str.replace("a","@@");
 var result1=str.replace(/a/gi,"@@")
 console.log(result);//1@@2b3c4d5A; 
 console.log(result1);//1@@2b3c4d5@@;

量词

通过量词设置一个内容出现的次数
{n}判断出现n次
且量词只对他前面一个字母起作用
var reg =/a{3}/     //相当于判断字符串是否含有aaa;
 	reg =/(ab){3}/  //判断字符串是否含有ababab;
    reg=/ab{1,3}c/ //表示出现一次b或两次三次都可,abc,abbc,abbbc;
    reg=/ab{1,}c/  //表示b至少出现1次以上
    reg=/ab+c/   //表示b至少出现1次以上和{1,}等同.
    reg=/ab*c/   //表示b出现0个或多个,相当于{0,};
    reg=/ab?c/   //表示b出现0个或一个,相当于{0,1};
console.log(reg.test("aaabc"));//true 

检查一个字符串是否以a开头

var reg=/^a/;

检查一个字符串是否以a结尾

var reg=/a$/;
var reg=/^a|a$/;//以a开头或者以a结尾

用正则表达式来判断是否为手机号
1.首位以1开头
2.第二位是3-9的数字
3.三位以后任意数字9个

var phoneStr="15129900990";
var phoneReg="/^1[3-9][0-9]{9}/";
console.log(phoneReg.test(phoneStr));

检查一个字符串中是否含有.
在正则中.表示一个任意字符,判断是否含有.则使用转义字符
使用函数 var 变量= new RegExp(“正则表达式”,“匹配模式”);中转义字符则需要\\(两个反斜杠) 。

var reg = / \. /
var result = reg.test(".");
var reg1 =new RegExp("\\.")
var result1 = reg1.test(".")
console.log(result);//true;
console.log(result1);//true;
var reg;
    reg=/\w/;任意数字,字母,下划线/[0-9A-z_]/ig
    reg=/\W/;除了任意数字,字母,下划线/^[0-9A-z_]/ig
    reg=/\d/;任意的数字/[0-9]/;
    reg=/\D/;除了任意的数字/^[0-9]/;
    reg=/\s/;空格;
    reg=/\S/;除了空格;
    reg=/\b/;单词边界
    reg=/\B/;除了单词边界

去除单词中开头和结尾的空格,保留中间空格

        var str = "     hello   myson      ";
        //去除掉字符串中前后的空格
        //去除空格可以使用""来替换空格
        //去除全部
        // str = str.replace(/\s/g,""); 
    
        //去除开头
        // str = str.replace(/^\s*/,"");
        //去除结尾
        // str = str.replace(/\s*$/,"");
        str = str.replace(/^\s*|\s*$/g,"");
        console.log(str);

for in 遍历对象

for(k in obj)
{
K 得到的是属性名
obj[k]得到的属性值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值