博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript基础学习——基础(三)
阅读量:3917 次
发布时间:2019-05-23

本文共 4166 字,大约阅读时间需要 13 分钟。

一、global对象

在JS中没有global对象,Web浏览器将Global作为window对象的一部分加以实现。
其实也可以理解为全局变量,不过要和局部变量加以区别
例如

var x=123function fn1{	var y=234}

此处的x为全局变量,在整段代码中都可以调用,y为局部变量,只在fn函数体内生效

方法:

a.encodeURIComponent():对unicode进行编码处理
b.decodeURIComponent():对unicode编码进行解码处理
c.eval(’’):具有字符串解析器的作用(慎用!因为它的性能较差,且比较危险)

var str = '我是我';  console.log(encodeURIComponent(str))  console.log(decodeURIComponent(encodeURIComponent(str)))  console.log(escape('我是我'))  console.log(unescape(escape('我是我')))

在这里插入图片描述

二、Math对象

该对象主要提供了大量的数学运算的属性和方法。
属性:
Math.E
Math.PI
方法:
Math.min():取最小值函数
Math.max():取最大值函数
Math.round():四舍五入函数
Math.ceil():向上取整(取大于或等于操作数的最小整数)
Math.floor():向s下取整(取小于或等于操作数的最大整数)
Math.random():产生[0,1)之间的一个任意小数
Math.abs(num): 返回num的绝对值
Math.exp(num): 返回Math.E的num次幂
Math.log(num): 返回num的自然对数
Math.pow(num,power): 返回num的power次幂
Math.sqrt(num):返回num的平方根
Math.acos(x): 返回x的反余弦值
Math.asin(x): 返回x的反正弦值
Math.atan(x): 返回x的反正切值
Math.atan2(y,x): 返回y/x的反正切值
Math.cos(x): 返回x的余弦值
Math.sin(x): 返回x的正弦值
Math.tan(x): 返回x的正切值

这些函数都可以自己尝试试验,在这里不多赘述

三、面向对象

创建对象:
1)常规创建
a.new
b.字面量

就像之前那样,这样创建很方便,但如果需要的数据很多时,就会很麻烦,比如:

var obj1 = new Object({    name: 'Tom',    age: 15,    fn: function () {      return this.name + this.age;    }  })  var obj2 = new Object({    name: 'Mickle',    age: 18,    fn: function () {      return this.name + this.age;    }  })

如果,这是一个学生管理系统,那么人数众多,常规创建看到会有很多代码要写,很繁琐、很复杂,慢慢便引出下面的方法

2)工厂模式

通过封装函数实现创建一批相似的对象。

function createObj(name, age) {    var obj = new Object();    obj.name = name;    obj.age = age;    obj.fn = function () {      return this.name + this.age;    }    return obj;  }  var obj3 = createObj('张三', 16);  var obj4 = createObj('李四', 19);  console.log(obj3, obj4);

如果使用工厂模式创建函数,则极大的较低了代码量,但缺陷在于无法知道创建的对象是哪一个对象的实例。

3)构造函数

构造函数是用来构建一个类(ES5中没类的概念,实际上这里的构造函数就是类)。
类是对象的一个抽象符号化表示(把相同或相似的一部分对象抽离出来就形成了一个类)。
对象是类的实例化(具体化)(赋予一定的属性和功能)

a.创建构造函数(类)

语法:
function 类名([形参列表]){
this.属性名 = 参数;
……
this.方法名 = function(){
函数体;
}
……
}

function Person(name, age=18){     this.name = name; // this代表的不是Person,而是实例化后的对象    this.age = age;    this.fn = function () {      return this.name + this.age;    }  }  var obj7 = new Person('七七', 28); // 实例化时this指向该对象obj7  var obj8 = new Person('八八', 30);  console.log(obj7)

b.通过构造函数实例化对象

new 类名([实参列表]);

使用了构造函数的方法,和使用工厂模式的方法他们不同之处如下:

• 构造函数方法没有显式的创建对象(new Object());
• 直接将属性和方法赋值给this对象;
• 没有return语句。

构造函数的方法有一些规范:

• 函数名和实例化构造名相同且大写,(PS:非强制,但这么写有助于区分构造函数和普通函数);
• 通过构造函数创建对象,必须使用new运算符。

构造函数执行的过程:

• 当使用了构造函数,并且new 构造函数(),那么就后台执行了new Object();
• 将构造函数的作用域给新对象,(即new Object()创建出的对象),而函数体内的this就代表new Object()
出来的对象。
• 执行构造函数内的代码;
• 返回新对象(后台直接返回)。

四、基本包装类型

在基本数据类型中有3个特殊的类的存在:String、Number和Boolean。

上面三个基本类型都有自己的包装对象,有相应的属性和方法。调用方法的过程是在后台发生的,所以我们称作为基本包装类型。

通俗地讲就是基本类型的数据都有一个包装它们的类,这些类都有自己的属性和方法,这些基本类型的数据都可以直接去调用这些属性和方法。

1)Boolean类型

没有自己的属性和方法。

2)Number类型

a.属性
MAX_VALUE 表示最大数
MIN_VALUE 表示最小值
NaN 非数值
NEGATIVE_INFINITY 负无穷大,溢出返回该值
POSITIVE_INFINITY 无穷大,溢出返回该值
prototype 原型,用于增加新属性和方法
b.方法
toString() 将数值转化为字符串,并且可以转换进制
toLocaleString() 根据本地数字格式转换为字符串
toFixed() 将数字保留小数点后指定位数并转化为字符串
toExponential() 将数字以指数形式表示,保留小数点后指定位数并转化为字符串
toPrecision() 指数形式或点形式表述数,保留小数点后面指定位数并转化为字符串
valueOf() 显示原始值

3)String类型

a.属性
length
b.方法
str.charAt(n) 返回指定索引位置的字符
str.charCodeAt(n) 以Unicode编码形式返回指定索引位置的字符
str.concat(str1…str2) 将字符串参数串联到调用该方法的字符串
str.slice(n,m) 返回字符串n到m之间位置的字符串
str.substring(n,m) 返回字符串n到m之间位置的字符串
str.substr(n,m) 返回字符串n开始的m个字符串
str.indexOf(str, n) 从n开始搜索的第一个str,并将搜索的索引值返回
str.lastIndexOf(str, n) 从n开始搜索的最后一个str,并将搜索的索引值返回
str.str.toLowerCase() 将字符串全部转换为小写
str.str.toUpperCase() 将字符串全部转换为大写
str.match(pattern) 返回pattern 中的子串或null
str.replace(pattern, replacement) 用replacement 替换pattern
str.search(pattern) 返回字符串中pattern 开始位置
str.split(pattern) 返回字符串按指定pattern 拆分的数组
String.fromCharCode(ascii) 静态方法,输出Ascii码对应值
str.localeCompare(str1,str2) 比较两个字符串,并返回相应的值

以上的属性,都可以自己进行尝试,这里只是简单的总结一下。

五、变量、作用域及内存

1)变量
a.基本类型的变量
基本类型的变量的值存储在栈中。通过变量名可以直接获取变量的值。
b.引用类型的变量
引用类型的变量的值存储在堆中,在栈中存储的是引用类型的变量的地址(指针)。如果要获取引用类型变量的值,需要先从栈中获取地址,再按址查找,从而获取到值。
2)作用域
在ES5作用域分为全局作用域和局部作用域两种。
在ES6作用域分为全局作用域、局部作用域和块级作用域三种。
全局作用域:定义在函数外部的变量拥有全局作用域。
局部作用域:定义在函数内部的变量拥有局部作用域。
跟上面的内容一致
3)垃圾回收机制
JS有自动回收垃圾的功能。在项目开发过程中,初始化对象时,最好赋初值为null。
例如:

var o = {name : 'Lee'};     o = null;//解除对象引用,等待垃圾收集器回收

转载地址:http://ffvrn.baihongyu.com/

你可能感兴趣的文章
.NET SDK-Style 项目(Core、Standard、.NET5)中的版本号
查看>>
如何在 C# 中使用 Buffer
查看>>
大学班里80%都去培训班,为什么我没去
查看>>
Beetlex之websocket/tls服务压测工具
查看>>
Abp小试牛刀之 图片上传
查看>>
使用Select.HtmlToPdf 把html内容生成pdf文件
查看>>
叮咚!你有一份来自明源云的圣诞邀约
查看>>
如何在 ASP.NET Core 中使用 URL Rewriting 中间件
查看>>
怎样使用C# 获取WIFI的连接状态?
查看>>
生态和能力是国内自研操作系统发展的关键
查看>>
轻量级消息队列RedisQueue
查看>>
2020,你收获了什么?又失去了什么?
查看>>
龙芯.NET正式发布 稳步推进生态建设
查看>>
MiniProfiler,一个.NET简单但有效的微型分析器
查看>>
如何解决在ASP.NET Core中找不到图像时设置默认图像
查看>>
.NET Core AWS S3云存储
查看>>
代码质量在「内卷时代」的重要性
查看>>
对 Redis 中的有序集合SortedSet的理解
查看>>
如何使用 C# 在异步代码中处理异常
查看>>
.Net Conf 2020 之回顾
查看>>