js笔记(v1.0)

js

数据类型

string

js中代表字符串需要用引号引起来

单双引号都可以但是不可以混着用

相同引号不可以嵌套 可以使用转义字符\转义

number

js中代表数字,包括整数和浮点数

最大的数字为1.7976931348623157e+308

比最大的数字还要大的数只能用Infinity来表示

Infinity表示正无穷 -Infinity表示负无穷

Infinity*Infinity还是Infinity

Infinity+Infinity还是Infinity

但是相减和相除的结果为NaN

字符串乘字符串的值用NaN来表示 意思为not a number

以上三个常量的类型都为Number类型

js的浮点数运算可能造成不精确的结果

千万不用js进行精确的要求高的运算

Boolean

true为真 false为假

typeof为boolean

Null与Undefined

这个类型只有一个值为null

null这个值专门用来表示一个为空的对象、

使用typeof检测会返回object

Undefined(未定义)类型的值只有一个,为undefined

当声明一个变量,但是不给变量赋值时,输出为undefined

使用typeof检查 会返回undefined

强制类型转换

将一个数据类型强制转换为其他数据类型

1.将其他类型转换为Sring

方式一

调用被转换类型的tostring()方法 此方法不影响原变量 会将转换后的结果返回 null和undefined这两个值没有toString()方法,调用会报错

方式二

调用String()函数,将要转换的数据当作参数传入 会返回转换后的结果

对于其他基本类型,String()函数底层调用了toString()方法,队友null和undefined,则是直接将他们转成了字符串

2.将其他类型转换为number

方式一

使用Number()函数,将要转换的内容传入

字符串–>number

如果纯数字字符串则可以转换,

如果字符串中有非数字的内容则转换为NaN

如果字符串为空串或者全为空格则为0

布尔–>number

false为0 true 为1

Null–>number

值为0

undefine–>number

结果为NaN

方式二

这种方式专门用来转换字符串

parseInt()把一个字符串转换为整数 如果I传入的参数不是字符串会先将其转换为字符串

从左往右读,读到第一个不是数字的数 如果第一个数就不是数字 则为NaN

parseFloat()把字符串转换为整数 从第一个字符开始 遇到第一个小数点继续转换,直到遇到第一个不是数字的字符

对象

对象分类

1.内建对象

es标准中定义的对象,在任何的es的实现中都可以使用

比如Math String

2.宿主对象

由js的运行环境提供的对象 目前主要指浏览器提供的对象

3.自建对象

由开发人员自己创建的对象

  //创建对象
     var obj=new Object();
     //添加属性
     obj.name="yjm";
     obj.age=20;
     console.log(obj);
     //改
     obj.name="LSK";
     //查
     console.log(obj.name);
     //删
  delete obj.name;

          console.log(obj);

使用字面量创建对象

    var obj={name:"yjm",age:18};

通过此方法创建的对象与new的对象相同,此方法在创建的时候可以指定对象的属性,属性名:属性值的方式写在大括号里面,中间用逗号隔开

函数

-函数也是一个对象

创建函数对象

          var fun=new Function();

可以在函数的构造方法中传入字符串形式的函数体 函数体()调用函数

   var fun=new Function(" console.log('这是第一个函数')");
   fun();

还可以使用函数声明创建函数

function 函数名(形参1,形参2…){

}

还可以使用函数表达式

var fun3=function(){
    	console.log("这是我的第三个函数");
    };
    fun3();

函数参数

调用函数时解析器不会对形参的类型检测,所以可能出现不同类型的计算

调用函数时解析器不会对实参的个数进行检测,多余的实参不会赋值

函数的实参可以是任意类型

函数返回值

默认返回undefined

返回值可以是任意数据类型,包括对象和函数

立即执行函数用括号()把函数全体括起来

  ( function aa(a,b){
    	console.log(a+b);
   })(1,2)

在后面可以传递参数

方法

在对象中,对象的属性可以为函数,这种函数叫做方法,只与函数区别于名字,没有功能差别

通过对象,属性名()调用方法

通过for循环可以枚举对象的属性

   var obj={name:"sun",
            age:"18",
            add:"baijing",
             sex:"boy"};
             var c="name";
      
   for(var n in obj){
   	console.log(obj[n])
   }

因为n是变量所以访问对象的属性不可以使用.操作符,只能使用中括号的形式

作用域

全局作用域

直接编写在script标签中都在全局作用域

再打开页面时创建,在关闭页面时销毁

在全局作用域中有一个全局对象winndow 他代表浏览器的窗口 由浏览器创建 可以直接使用

在全局作用域中创建的对象都会以window对象的属性保存

创建的函数都会以window的方法保存

变量的声明提前

使用var关键字声明的变量,会在所有代码执行之前被声明 会在执行那一行被赋值

console.log(v);
      var v=10;

输出为undefined

如果不用var则报错

函数的声明提前

使用函数声明形式创建的函数 function 函数名(){}会在所有代码执行之前被创建 所以就可以在函数声明前调用

使用函数表达式创建函数,不能提前赋值,所以不能再赋值前调用

       fun1();
       fun2();
//函数声明会被提前创建
       function fun1(){
       	console.log("我是fun1");
       }
//函数表达式 声明会提前赋值不会
       var fun2=function(){
       	console.log("我是fun2");
       }

fun1可以正常调用,fun2为undefined所以会报错

函数作用域

调用函数时创建函数作用域,函数执行完毕后函数作用域销毁 函数作用域可以访问到全局变量

在函数中操作变变量时,会现在自身作用域中寻找,如果有直接使用,没有就想上寻找

在函数中想使用全局变量可以使用window对象的属性访问变量

在函数中也有声明提前的特性

在函数不使用var创建的变量会成为全局变量

this关键字

解析器在调用函数时每次都会传递一个隐含的参数

这个隐含的参数就是this this指向的是一个对象

这个对象我们称为函数执行的上下文对象

根据函数的调用方式不同,this会指向不同的对象

1 以函数的形式调用,this永远是window

2 以方法的形式调用,this是调用方法的对象

使用工厂方法创建对象

function createper(name,age,add){
			var obj=new Object();
			obj.name=name;
			obj.age=age;
			obj.add=add;
			obj.sayname=function(){
				console.log(obj.name);
			}
			return obj;
		}

使用此方法创建的对象类型为object

使用构造函数创建对象

function Person(name,age,add){
	    	this.name=name;
			this.age=age;
			this.add=add;
	    }
	    var per3=new Person("kha",23,"kk");

使用new +函数名创建对象时,会立即创造一个当前函数名字类型的对象,this指向的就是这个对象 然后执行函数的代码 最后将this对象返回 在函数内部不需要返回 因为new 函数()会自动返回目标对象

使用对象 instanceof 方法名 可以检查是否为对象的实例

per3 instanceof Person 任何对象和object做检查都为true

原型对象 prototype

我们创建的每一个函数,解析器都会像里面添加一个prototype属性 如果函数作为普通函数调用 prototype没有任何作用

当函数通过构造函数调用时,所创建的对象会有一个隐含的属性指向该构造函数的原型对象,可以通过__proto__访问

所有通过构造方法的对象共享一个原型对象 原型对象就相当于一个公共区域 所有的实例都可以访问 所以可以将公共部分存入原型对象中

当我们访问对象的一个属性或方法时,对象会现在本身找,如果没找到则会去原型对象中寻找

如果原型对象中没有则会继续去原型对象的原型对象中寻找直到找到object的原型对象

使用 属性 in 对象会返回对象,包括原型对象是否有此属性

如果想要检查是否在对象中有此属性可以使用对象的hasownpoverty()方法

toString()方法

我们直接输出对象输出的其实是对象toString()方法的返回值,如果想直观的看到对象的属性必须要修改toString()方法

可以直接修改构造方法原型对象中的tostring,如果只修改对象的话,只会对一个对象生效

 per1.__proto__.toString=function(){
         	return "name="+this.name+"age="+this.age+"add"+this.add;
         }

垃圾回收

当一个对象没有任何的变量或属性对他进行引用,此对象以后就无法继续操作,所以这个对象就是一个垃圾这种对象过多会占用大量的内存空间导致程变慢所以这种垃圾必需清理

在js中有自动的垃圾回收机制,会自动将垃圾对象从内存中销毁

数组

Array为内建对象 和普通对象功能类似,用来储存值

不用的是对象是使用字符串作为属性名 数组是使用数字来做索引操作元素

连续的数组 length属性可以获得数组的长度

非连续的数组 ,length可以获取最大小标加1的长度 最好不用非连续的数组

修改length

如果把length变大 则多出来的部分会空出来

如果length变小,则多出来的元素会被删除

使用字面量创建数组可以指定值

var arr=[1,2,3,4,5]

var arr2=new Array(1,2,3,4,5 )

数组的基本方法

push方法

向数组的最后添加一个元素或多个元素,多个元素用逗号隔开,返回值为添加成功后新的数组的长度

pop方法

删除并返回数组的最后一个元素

unshift方法

像数组开头添加一个或多个元素并返回新数组的长度,可以添加多个用逗号隔开

shift方法

移除数组的第一个元素并返回

遍历数组 foreach

foreach方法需要一个函数作为参数 像这种函数由我们创建但不需要我们调用的叫做回调函数

数组中有几个元素,函数就执行几次 每次执行时浏览器会将遍历到的元素以实参的形式传入可以定义形参接收内容

第一个参数为当前正在遍历的元素

第二个参数为当前元素对应的索引

第三个参数为正在遍历的数组

slice从数组中提取指定元素

参数 start 截取开始位置的索引 end 截取结束位置的索引 该方法不会改变原数组,会封装新数组返回

第一个参数必须第二个可以不写默认全部截取 如果传递赋值则从后往前计算

splice删除数组元素

此方法会影响到原数组,会将指定元素从原数组删除并将删除的值作为返回值

参数第一个表示开始位置索引 第二个表示删除的数量 第三个及以后可以传递一些新的元素,这些元素会插入到开始位置索引的前面

concat方法连接数组

返回连接后的新数组,不会改变原数组

join方法将数组转换为字符串

返回String类型的数组 可以指定参数 参数为数组中的连接符 默认,为连接符

sort方法对原数组进行排序

对于纯数字数组,使用sort排序,会按照unicode编码进行排序,所以对数字排序可能获得错误的结果

我们可以自己指定规则 我们可以在sort中添加一个回调函数,来指定排序规则

回调函数中定义两个形参

浏览器会分别使用数组中的元素作为实参去调用回调函数

函数接受的实参不确定,但第一个形参一定在第二个形参

浏览器会根据回调函数的返回值来决定元素的顺序

如果返回一个大于0的值,交换两数的位置

如果返回值小于等于0不反悔

如果要升序则 return a-b

降序返回b-a

函数的call和apply

这两个是函数对象的方法,需要通过函数对象去调用

这两个方法和调用函数方法功能相同

调用call和apply方法时可以将对象指定为第一个参数

此时这个对象会成为函数的this

call方法可以将实参在对象后依次传递

apply方法需要将实参封装为数组

this的情况

1.以函数的方法调用 this为window对象

2以方法的方式,this为调用方法对象

3以构造方法的方式调用 this为要返回的对象

4,使用call和aplly this为指定传入的对象

arguments

在调用函数时,浏览器会向函数传递两个隐含的参数

1函数上下文对象this

2封装实参的对象arguments

arguments是一个类数组对象 它可以通过索引操作元素也可以获取长度

在调用函数时,所有传递的实参都会在arguements中保存

里面还有一个属性叫callee 这个属性对应一个函数对象就是当前正在执行的对象

Date对象

使用构造函数创建Date对象 会封装代码的执行时间

想要创建一个指定的时间对象

需要在构造函数中传递一个表示时间的字符串作为参数 格式为

月/日/年 时:分:秒

getDate()

会获取当前对象日期是几日

getDay()

获取当前对象是周几

0-6 0表示周日

getMonth()

返回当前对象的月份

0表示1月

1表示2月

11表示12月

Math对象

math和其他对象不同,他不是一个构造函数,是一个工具类里面封装了数学运算相关的属性和方法

包装类

在js中为我们提供了三个包装类,可以将基本数据类型转换为对象

正则表达式

1.创建正则表达式对象

DOM

宿主对象

浏览器为我们提供了文档节点对象 这个对象是window的属性 可以在页面直接使用 文档节点代表的整个网页

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值