JavaScript 函数 ,对象
复习函数
函数定义
function函数名(){
函数体
函数调用:
函数名()
*参数:形参和实参
*形参:函数定义的时候函数名字后面的小括号里的变量就是参数,是不需要写var
*实参:函数调用的时候小括号里传入的变量或者是值,都是丈参
*返回值:函数中如果有return,那么这个函数就有返回值
*如果函数中没有return,那么这个函数没有返回值
*如果函数中有return,但是后面什么内容都没有,这个函数没有明确返回值
*如果- 个函数没有明确的返回值,函数调用了,并且接收了,那么此时接收的结果undefined
*如果直接输出函数名字,那么是这个函数的代码
rguments 对象
- arguments 对象实际上是所在函数的一个内置类数组对象
- 每个函数都有一个arguments属性,表示函数的实参集合,这里的实参是重点,就是执行函数时实际传入的参数的集合。arguments不是数组而是一个对象,但它和数组很相似,所以通常称为类数组对象,以后看到类数组其实就表示arguments。arguments对象不能显式的创建,它只有在函数开始时才可用。
- arguments还有属性callee,length和迭代器Symbol。
- arguments同样具有length属性,arguments.length 为函数实参个数,可以用arguments[length]显示调用参数
- arguments对象可以检测参数个数,模拟函数重载
arguments是一个对象,是一个伪数组arguments. Length--->是实参的个数arguments[素引---->实参的值
作用域:变量的使用范围
全局作用域:全局变量在任何位置都可以使用的范围
*局部作用域:局部变量只能在某个地方使用---函数内
*作用域链:在一个函数中使用一个变量,先在该函数中搜索这个变量,找到了则使用找不到则继续向外面找这 个变量,找到则使用,一直找到全局作用域,找不到则是undefined*全局变量:只要是在函数外面声明的变量都可以看成或者是理解成是全局变量
*局部变量:在函数中定义的变量
*预解析:在执行代码之前做的事情
最上面米变量的声明和函数的声明被提前了,变量和函数的声明会提升到当前所在的作用域的*函数中的变量声明,会提升到该函数的作用城的最上面(里面
*如果有多对的script标签都有相同名字的函数,预解析的时候是分段的,互不影响
JavaScript 对象
在 JavaScript中,几乎所有的事物都是对象。
在 JavaScript 中,对象是非常重要的,当你理解了对象,就可以了解 JavaScript 。 |
你已经学习了 JavaScript 变量的赋值。
以下代码为变量 car 设置值为 "Fiat" :
var car = "Fiat";
对象也是一个变量,但对象可以包含多个值(多个变量),每个值以 name:value 对呈现。
var car = {name:"Fiat", model:500, color:"white"};
在以上实例中,3 个值 ("Fiat", 500, "white") 赋予变量 car。
JavaScript 对象是变量的容器。 |
对象定义
你可以使用字符来定义和创建 JavaScript 对象:
实例
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
</head>
<body>
<p>创建 JavaScript 对象。</p>
<p id="demo"></p>
<script>
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
document.getElementById("demo").innerHTML =
person.firstName + " 现在 " + person.age + " 岁.";
</script>
</body>
</html>
创建 JavaScript 对象。
John 现在 50 岁.
定义 JavaScript 对象可以跨越多行,空格跟换行不是必须的:
实例
var person = {
firstName:"John",
lastName:"Doe",
age:50,
eyeColor:"blue"
};
对象属性
可以说 "JavaScript 对象是变量的容器"。
但是,我们通常认为 "JavaScript 对象是键值对的容器"。
键值对通常写法为 name : value (键与值以冒号分割)。
键值对在 JavaScript 对象通常称为 对象属性。
JavaScript 对象是属性变量的容器。 |
对象键值对的写法类似于:
- PHP 中的关联数组
- Python 中的字典
- C 语言中的哈希表
- Java 中的哈希映射
- Ruby 和 Perl 中的哈希表
访问对象属性
你可以通过两种方式访问对象属性:
实例 1
person.lastName;
实例 2
person["lastName"]
对象方法
对象的方法定义了一个函数,并作为对象的属性存储。
对象方法通过添加 () 调用 (作为一个函数)。
该实例访问了 person 对象的 fullName() 方法:
实例
name = person.fullName();
如果你要访问 person 对象的 fullName 属性,它将作为一个定义函数的字符串返回:
实例
name = person.fullName;
JavaScript 对象是属性和方法的容器。 |
在随后的教程中你将学习到更多关于函数,属性和方法的知识。
访问对象方法
你可以使用以下语法创建对象方法:
methodName : function() {
// 代码 }
你可以使用以下语法访问对象方法:
实例
objectName.methodName()
通常 fullName() 是作为 person 对象的一个方法, fullName 是作为一个属性。
如果使用 fullName 属性,不添加 (), 它会返回函数的定义:
实例
objectName.methodName
编程思想
*编程思想:把一些生活中做事的经验融入到程序中
*面向过程:凡事都要亲力亲为,每件事的具体过程都要知道,注重的是过程*面向对象:根据需求找对象,所有的事都用对象来做,注重的是结果
*面向对象特性:封装,继承,多态(抽象性)
* js不是面向对象的语言,但是可以模拟面向对象的思想js是一门基于对象的语言: I
创建对象三种方式:
* 1.调用系统的构造函数创建对象
* var变量名= new object(); objeqt是系统的构造函数
*2.自定义构造函数创建对象(结合第-一种和箭求通过工厂模式创建对象)
instance查函数类型
//自定义构造函数创建对象,我要自己定义一个构造函数,自定义构造函数,创建对象//函数和构造函数的区别:名字是不是大写(首字母是大写
自定义构造函数
function Person(name,age) {
this.name=name;
this.age=age;
this.sayHi-function() {
console.log("您好,我叫:"+this . name);};
//创建对象----实例化一个对象,并初始化
var per=new Person("小明",20) ;
}
}
对象构建内存图四件事:
/*
* 1.开辟空间,存储创建的新的对象
* 2.把this设置为当前的对象
3.设置对象的属性和方法的值
4.返回创建后新的对象
*3.字面量的方式创建对象
缺陷:一次性对象
1利用字面量创建对象
var obj = {};
var obj={
uname:‘张三丰’,
age:18,
sex:'男',
sayHi:function(){
console.log('hi');
}
}
1)里面的属性或者方法采取键值对的形式
2)多个属性或方法用逗号隔开
3)方法冒号后面跟的是一个匿名函数
2.使用对象
(1)对象名.属性名
console.log(obj.uname)
(2)调用属性还有一种方法:对象名['属性名']
(3)调用对象的方法:对象名.方法名
obj.sayHi();
不要忘记添加小括号
2.2利用new Object创建对象
var obj = new Object( );
obj.uname='张三丰';
obj.age=18;
obj.sex='男';
obj.sayHi=function(){
console.log('Hi');
}
(1)我们是利用等号 = 赋值的方法,添加对象的属性和方法
(2)每个属性和方法之间用分号结束
(3)console.log(obj.uname);
console.log(obj['sex']);
obj.sayHi();
2.3利用构造函数创建对象
原因:前面两种创建对象的方法一次只能创建一个对象
特点:封装的是对象,不是普通代码
构造函数:把我们的对象里面一些相同的属性和方法抽象出来封装到函数面
function 构造函数名 (){
this.属性=值;
this.方法=function(){}
}
new 构造函数名( );
function Star(uname,age,sex){
this.name=uname;
this.age=age;
this.sex=sex;
this.sing=function(sang){
console.log(sang);
}
}
var ldh = new Star('刘德华',18,'男');//调用函数返回的是一个对象
console.log(ldh.name);
console.log(ldh['sex']);
ldh.sing('冰雨');
var zxy = new Star('张学友',20,'男');
console.log(zxy.name);
console.log(zxy.age);
//构造函数的名字首字母要大写
//构造函数不需要return就能返回结果
//调用构造函数必须使用new
//只要new Star()调用函数就创建一个对象
//属性和方法前面必须添加this
访问对象的属性
属性是与对象相关的值。
访问对象属性的语法是:
objectName.propertyName
这个例子使用了 String 对象的 length 属性来获得字符串的长度:
var message="Hello World!";var x=message.length;
在以上代码执行后,x 的值将是:
12
访问对象的方法
方法是能够在对象上执行的动作。
您可以通过以下语法来调用方法:
objectName.methodName()
这个例子使用了 String 对象的 toUpperCase() 方法来将文本转换为大写:
var message="Hello world!";var x=message.toUpperCase();
在以上代码执行后,x 的值将是:
HELLO WORLD!
JavaScript 深入了解基本类型和引用类型的值
一个变量可以存放两种类型的值,基本类型的值(primitive values)和引用类型的值(reference values)。
ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)
//原始数据类型: number, string, boolean, undefined, null,object//基本类型(简单类型),值类型: number, string, boolean
//复杂类型(引用类型):object
//空类型: undefined, null
//值类型的值在哪块空间中存储? 栈中存储
//引用类型的值在哪块空间中存储?对象在堆上存储地址在栈上存储
流畅,字嘉
基本类型
JavaScript 中共有 6 种基本数据类型:Undefined、Null、Boolean、Number、String、Symbol (new in ES 6) !
约定:基本数据类型与原始数据类型等意。
基本数据类型的值是按值访问的。
基本类型的值是不可变的
var str = "123hello321";
str.toUpperCase(); // 123HELLO321
console.log(str); // 123hello321
基本类型的比较是它们的值的比较
var a = 1;var b = true;
console.log(a == b); // true
console.log(a === b); // false
上面 a 和 b 的数据类型不同,但是也可以进行值的比较,这是因为在比较之前,自动进行了数据类型的 隐式转换。
== : 只进行值的比较
=== : 不仅进行值得比较,还要进行数据类型的比较
基本类型的变量是存放在栈内存(Stack)里的
var a,b;
a = "zyj";
b = a;
console.log(a); // zyj
console.log(b); // zyj
a = "呵呵"; // 改变 a 的值,并不影响 b 的值
console.log(a); // 呵呵
console.log(b); // zyj
引用类型
除过上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型。细分的话,有:Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型 等。
引用类型的值是按引用访问的。
引用类型的值是可变的
var obj = {name:"zyj"}; // 创建一个对象
obj.name = "percy"; // 改变 name 属性的值
obj.age = 21; // 添加 age 属性
obj.giveMeAll = function(){
return this.name + " : " + this.age;}; // 添加 giveMeAll 方法
obj.giveMeAll();
引用类型的比较是引用的比较
var obj1 = {}; // 新建一个空对象 obj1var obj2 = {}; // 新建一个空对象 obj2
console.log(obj1 == obj2); // false
console.log(obj1 === obj2); // false
因为 obj1 和 obj2 分别引用的是存放在堆内存中的2个不同的对象,故变量 obj1 和 obj2 的值(引用地址)也是不一样的!
引用类型的值是保存在堆内存(Heap)中的对象(Object)
与其他编程语言不同,JavaScript 不能直接操作对象的内存空间(堆内存)。
var a = {name:"percy"};var b;
b = a;
a.name = "zyj";
console.log(b.name); // zyj
b.age = 22;
console.log(a.age); // 22var c = {
name: "zyj",
age: 22};
图解如下:
栈内存中保存了变量标识符和指向堆内存中该对象的指针
堆内存中保存了对象的内容
检测类型
typeof:经常用来检测一个变量是不是最基本的数据类型
var a;typeof a; // undefined
a = null;typeof a; // object
a = true;typeof a; // boolean
a = 666;typeof a; // number
a = "hello";typeof a; // string
a = Symbol();typeof a; // symbol
a = function(){}typeof a; // function
a = [];typeof a; // object
a = {};typeof a; // object
a = /aaa/g;typeof a; // object
instanceof:用来判断某个构造函数的 prototype 属性所指向的对象是否存在于另外一个要检测对象的原型链上
简单说就是判断一个引用类型的变量具体是不是某种类型的对象
({}) instanceof Object // true([]) instanceof Array // true(/aa/g) instanceof RegExp // true(function(){}) instanceof Function // true
JavaScript Math 对象
Math 对象
Math 对象用于执行数学任务。
Math 对象并不像 Date 和 String 那样是对象的类,因此没有构造函数 Math()。
语法
var x = Math.PI; // 返回PI
var y = Math.sqrt(16); // 返回16的平方根
Math 对象教程,请参照本站的JavaScript Math 对象教程。
Math 对象属性
属性 |
描述 |
E |
返回算术常量 e,即自然对数的底数(约等于2.718)。 |
LN2 |
返回 2 的自然对数(约等于0.693)。 |
LN10 |
返回 10 的自然对数(约等于2.302)。 |
LOG2E |
返回以 2 为底的 e 的对数(约等于 1.4426950408889634)。 |
LOG10E |
返回以 10 为底的 e 的对数(约等于0.434)。 |
PI |
返回圆周率(约等于3.14159)。 |
SQRT1_2 |
返回 2 的平方根的倒数(约等于 0.707)。 |
SQRT2 |
返回 2 的平方根(约等于 1.414)。 |
Math 对象方法
方法 |
描述 |
abs(x) |
返回 x 的绝对值。 |
acos(x) |
返回 x 的反余弦值。 |
asin(x) |
返回 x 的反正弦值。 |
atan(x) |
以介于 -PI/2 与 PI/2 弧度之间的数值来返回 x 的反正切值。 |
atan2(y,x) |
返回从 x 轴到点 (x,y) 的角度(介于 -PI/2 与 PI/2 弧度之间)。 |
ceil(x) |
对数进行上舍入。 |
cos(x) |
返回数的余弦。 |
exp(x) |
返回 Ex 的指数。 |
floor(x) |
对 x 进行下舍入。 |
log(x) |
返回数的自然对数(底为e)。 |
max(x,y,z,...,n) |
返回 x,y,z,...,n 中的最高值。 |
min(x,y,z,...,n) |
返回 x,y,z,...,n中的最低值。 |
pow(x,y) |
返回 x 的 y 次幂。 |
random() |
返回 0 ~ 1 之间的随机数。 |
round(x) |
四舍五入。 |
sin(x) |
返回数的正弦。 |
sqrt(x) |
返回数的平方根。 |
tan(x) |
返回角的正切。 |
JavaScript 函数 ,对象相关推荐
- 深入探讨JavaScript函数对象
人人生而平等,但有些人比其他人更加平等--奥威尔 函数是进行模块化程序设计的基础,编写复杂的Ajax应用程序,必须对函数有更深入的了解. javascript中的函数不同于其他的语言,它的每个函数都是 ...
- 爬虫不得不学之 JavaScript 函数对象篇
今天好像是情人节?所以最适合面向对象,JavaScript 也有对象,我们也可以随时面向对象,方便得很,那怎样才有对象呢?下面告诉你! 1. 数组 数组,字面意思就是一堆数的组合,但是它是有顺序的,学 ...
- 通过 “函数对象”看javascript函数
#前言 本文主要阐述一些JavaScript行为的深层原因.很多东西都是主观臆测结合编程经验推测出来的. 如有谬误请包涵,也可以联系作者(qq:504451056,email:504451056@qq ...
- JavaScript函数与Window对象
JavaScript函数与Window对象 一.函数的使用 函数的含义:类似于Java中的方法,是完成特定任务的代码语句块 ◆常用系统函数: parseInt ("字符串") ...
- JavaScript类型·对象·函数
ECMAScript是一种由Ecma国际通过ECMA-262标准化的脚本程序设计语言,它往往被称为JavaScript或JScript,但实际上后两者是ECMA-262标准的实现和扩展. ECMASc ...
- 七、深入JavaScript函数,对象和作用域(三)
@Author:Runsen @Date:2020/5/26 作者介绍:Runsen目前大三下学期,专业化学工程与工艺,大学沉迷日语,Python, Java和一系列数据分析软件.导致翘课严重,专业排 ...
- JavaScript(三)—— JavaScript 函数/JavaScript 作用域/JavaScript 预解析/JavaScript 对象
本篇为 JavaScript 系列笔记第三篇,将陆续更新 JavaScript(一)-- 初识JavaScript/注释/输入输出语句/变量/数据类型 JavaScript(二)-- JavaScri ...
- JavaScript函数之实际参数对象(arguments) / callee属性 / caller属性 / 递归调用 / 获取函数名称的方法...
函数的作用域:调用对象 JavaScript中函数的主体是在局部作用域中执行的,该作用域不同于全局作用域.这个新的作用域是通过将调用对象添加到作用域链的头部而创建的(没怎么理解这句话,有理解的亲可以留 ...
- 理解JavaScript函数(函数和对象的区别和联系)
原文:http://harrison2010.javaeye.com/blog/173446 函数对象和其他内部对象的关系 除了函数对象,还有很多内部对象,比如:Object.Array.Date.R ...
最新文章
- linux gcc编译c文件头文件,使用GCC编译器编译C语言
- Android.mk中添加宏定义
- http缓存机制之304状态码
- Nginx的client_header_buffer_size和large_client_header_buffers学习
- linux下为php开启oci8扩展(ubuntu14亲测可用)
- fastjson和json-lib的区别
- 单片机shell命令_单片机裸机下写一个自己的shell调试器
- 浮动路由与VRRP的概念
- 强网杯2019线上赛-misc
- 稳压二极管的原理和伏安特性
- 模型评估(误差平方和(SSE The sum of squares due to error))
- html5小游戏猴子爬树源码,猴子爬树小班教案
- uefi如何安装linux系统教程,UEFI启动模式下安装Ubuntu教程
- ZigBee Dotdot
- 机器学习——特征工程——数据的标准化(Z-Score,Maxmin,MaxAbs,RobustScaler,Normalizer)
- 使用minikube快速部署k8s集群
- 君子不玩物丧志,亦常以借物调心,网站集成二次元网页小组件(widget)石蒜模拟器,聊以赏玩
- VUE中箭头函数可不兴用,尤其是箭头函数里头阿喂
- 如何扩大营销卖蜂蜜?
- 什么样的人适合读博士