Javascript对象编程学习中,一直不能很好的掌握对象的属性(property)和方法(method)。今天在写代码过程中,又犯了一个低级错误。 Javascript对象的方法 通过自定义一个球的对象。...断点跟踪就证明自己猜想是对的,但是这是一个对象,我只是new一下,不可能回去调用它的方法呀!并且drawball()方法也是在init()函数里面调用的。仔细一行一行的看代码,看到底哪里出了问题。...所以此时的ctx确实为undefined。 正确的做法是把方法的名字赋值给对象的方法。
age: 12} Dog.prototype = Animal; var dog2 = new Dog(12); console.log(dog2);//{age: 12} dog2对象的...概念: 在segmentfault社区找到相关概念: 当为一个对象属性赋值是要遵循以下规则: 当对象的原型链中的原型对象上有对应的属性名,但是其是只读的,那么对象属性的赋值操作无效; 当对象的原型链中的原型对象上有对应的属性名...,但是其是可写的,且设置了set方法,那么对象属性的赋值操作无效,转而调用调用原型对象中的属性的set方法; 当对象的原型链中的原型对象上有没有对应的属性名,那么直接在当前对象上添加这个属性(如果没有这个属性...)并赋值。...//通过知道属性只读,对象属性赋值操作无效,那么我们可以更改name的property-wirteable为true,如下 Object.defineProperty(Animal, 'name',
赋值和浅拷贝的区别 一直以为对象赋值和对象浅拷贝是一样的,但实际上它们还是有很大差异。 先看赋值,将一个对象赋值给一个新的对象的时候,赋的其实是该对象在栈中的地址,而不是堆中的数据。...也就是一个对象的改变就会改变另外一个对象。 再看浅拷贝,浅拷贝会创建一个对象,再去遍历原始对象,如果原对象的属性值是基础类型,那么就拷贝基础类型,如果是引用类型,则拷贝的是指针。 是不是有点蒙蔽?...obj1 是源对象,obj2 是赋值得到的,obj3 是浅拷贝得到的,如果我们改变的第一层数据不管是原始类型还是引用类型,那么 obj2 的改变都会导致 obj1 的改变。...obj3 如果第一层数据改变的是原始类型,那么不会影响源数据,改变的是引用类型数据,则会影响 obj1 的改变。 关于赋值,还有一个很基础的点,很惭愧,之前竟然理解错了。...总结 赋值和浅拷贝的区别在于对象第一层数据对原对象的影响,如果是赋值,改变会直接影响原对象。
今天介绍JS基本数据类型,JavaScript中的数据有如下几种: 基本类型:字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、符号(Symbol...其他六个 JavaScript 中有效的转义序列: 代码 用途 \b 退格键 \f 换页 \n 换行 \r 回车 \t 水平制表符 (3) 字符串长度 内建属性 length 可返回字符串的长度。...,JavaScript和其他程序设计语言(如C和Java)的不同之处在于,它不区别整型数值和浮点型数值,统一使用 Number 类型表示。...因此通过将变量赋值为 Null 我们可以创建一个空的对象。...五 未定义(Undefined) 1 简介 未定义(Undefined )也是一个只有一个值的特殊数据类型,表示未定义。当我们声明一个变量但未给变量赋值时,这个变量的默认值就是 Undefined。
JavaScript是甲骨文公司的注册商标。Ecma国际以JavaScript为基础制定了ECMAScript标准。JavaScript也可以用于其他场合,如服务器端编程。...完整的JavaScript实现包含三个部分:ECMAScript,文档对象模型,浏览器对象模型。...表示真或者假 未定义undefined 因为JavaScript中变量的类型是由它的值来决定的,如果一个变量没有给值, 那它就是未定义 判断类型:typeof 对象类型 对象类型是很复杂的一个类型...注释写与不写都不会影响代码的运行,注释与代码的结果没有关系 当然了,也可以用来阻止代码的运行(注释掉将要执行的代码) 方式一:单行注释 在语句最前面打上两个//(右shift左边那个键)...取反 真变假,假变真 赋值运算符 在JavaScript里等于号代表赋值,==代表等于 复合赋值运算符:+=,-=,=,/= n+=5 等于n=n+5 其他同理 其实就是程序员的偷懒
'greater than 10' : 'less than 10'; 1.2 循环语句 当使用纯 JavaScript(不依赖外部库,如 jQuery 或 lodash)时,下面的简写会非常有用。...高级篇 2.1 变量赋值 当将一个变量的值赋给另一个变量时,首先需要确保原值不是 null、未定义的或空值。...: 2.2 默认值赋值 如果预期参数是 null 或未定义,则不需要写六行代码来分配默认值。...简写为: const dbHost = process.env.DB_HOST || 'localhost'; 2.3 对象属性 ES6 提供了一个很简单的办法,来分配属性的对象。...简写为: 2.8 解构赋值 解构赋值是一种表达式,用于从数组或对象中快速提取属性值,并赋给定义的变量。 在代码简写方面,解构赋值能达到很好的效果。
,例如 node.js 和 Apache CouchDB,JS 是一种基于原型、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如:函数式编程)编程风格JavaScript 介绍HTML 是一种标记语言...JavaScript 特点:① 解释性执行的脚本语言;② 基于对象;③ 简单弱类型;④ 相对安全(不会操控文件);⑤ 事件驱动;⑥ 跨平台性;JavaScript 引入方式内部写入 在 HTML 文件中直接进行代码的书写...,在 Chrome 浏览器开发者工具中,快捷键 F12JavaScript 声明及命名规则直接量(literal),程序中直接使用的数据值变量(variable),变量是使用 var 关键字定义的一个存储空间...("button");var btnList = document["getElementsByTagName"]("button");//对象的声明赋值var person = { name:...鼠标双击某个对象onerror 当加载文档或图像时发生某个错误onfocus 元素获得焦点onkeydown 某个键盘的键被按下onkeypress 某个键盘的键被按下或按住onkeyup 某个键盘的键被松开
在JavaScript中,所有的对象都是一组属性的集合,属性可以是数值,字符串等原始类型,也可以是函数,或者是其他对象。 属性的类型 JavaScript中的属性有两种类型:数据属性和访问器属性。...var o = {}; o.prop1 = "value1"; 上面的代码中,对象o的属性prop1即会在被赋值时自动创建。...objC.prop1 = 20; 这时如重新将objC.prop1进行赋值,并不会影响到objB和objA,而是objC自身会被自动创建一个同名的数据属性。...里对象的属性是以键/值对的形式存在的,这里的「键」不限于字符串类型,也可以是数值或其他对象。...事实上,JavaScript中的数组(Array),本质上也是一个键/值对的集合,数值类型的自然索引也是作为属性名(键)存在的。
JavaScript的设计者希望用null表示一个空的值,而undefined表示值未定义,undefined仅仅在判断函数参数是否传递的情况下有用。 null:有盒子,但里面是空的。...,即true arr[6]; // 索引超出了范围,返回undefined 七,对象 vaScript的对象是一组由键-值组成的无序集合,例如: var person = { name: '小李...', age: 20, tags: ['js', 'web', 'mobile'], } JavaScript对象的键都是字符串类型,值可以是任意数据类型。...上述person对象一共定义了3个键值对,其中每个键又称为对象的属性,例如,person的name属性为'小李'。...变量在JavaScript中就是用一个变量名表示,变量名是大小写英文、数字、$和_的组合,且不能用数字开头。变量名也不能是JavaScript的关键字,如if、while等。
在Chrome里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在Chrome开发者控制台可以很容易地重现这个错误。...TypeError: ’undefined’ is not an object 在Safari里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在Safari开发者控制台可以很容易地重现这个错误...有意思的是,在JavaScript里,null和undefined其实是不一样的,所以我们会看到两个不同的错误消息。undefined表示未赋值的变量,而null表示变量值为空。...TypeError: Object doesn’t support property 在IE里读取未定义对象的属性或调用未定义对象的方法时就会发生这个错误,在IE开发者控制台可以很容易地重现这个错误。...ReferenceError: event is not defined 在访问一个未定义的对象或超出当前作用域的对象时就会发生这个错误,这个错误可以在Chrome开发者控制台重现。
许多开发人员已经(大部分)知道如何为操作系统编写应用程序。 管理应用程序很简单。这有助于公共场所的安装,如网吧和学校。...例如,变量的名称和未引用的属性键的名称必须是有效的标识符。标识符区分大小写。...JavaScript 中的所有正常值都有*属性*。⁷ 每个属性都有一个*键*(或*名称*)和一个*值*。你可以把属性看作记录的字段。...未定义和 null 的历史 单个非值可以扮演undefined和null的角色。为什么 JavaScript 有两个这样的值?原因是历史性的。...运算符和对象 所有运算符都会强制转换(如类型强制转换中所讨论的)它们的操作数为适当的类型。大多数运算符只能处理原始值(例如,算术运算符和比较运算符)。
function outFun2() { variable = "未定义直接赋值的变量"; var inVariable2 = "内层变量2"; } outFun2();//要先执行这个函数...,否则根本不知道里面是啥 console.log(variable); //未定义直接赋值的变量 console.log(inVariable2); //inVariable2 is not defined...局部作用域(Local Scope) 和全局作用域相反,局部作用域一般只在固定的代码片段内可访问到,最常见的例如函数内部,所有在一些地方也会看到有人把这种作用域称为函数作用域 。 如 1....函数对象和其它对象一样,拥有可以通过代码访问的属性和一系列仅供 JavaScript 引擎访问的内部属性。...该过程从作用域链头部,也就是从活动对象开始搜索,查找同名的标识符,如果找到了就使用这个标识符对应的变量,如果没找到继续搜索作用域链中的下一个对象,如果搜索完所有对象都未找到,则认为该标识符未定义。
快捷键 ctrl+shift+/ 示例: 2.2.2 变量 2.2.2. 1 变量简述 变量:标示内存中的一块空间,用于存储数据,且数据是可变的。...变量的声明: var 变量名 ; // 变量赋予默认值,默认值为 undefined (未定义的) 变量的声明和赋值: var 变量名 = 值 ; // 变量赋予对应的值...关键字作为变量名,如: function 、 this 、 class JavaScript 严格区分大小写 。...所以 JavaScript 的引用数据类型都是 对象 。 JavaScript 对象类型的默认值是 null....仅根据方法名来调用函数,即使实参与函数的 形参不匹配,也不会影响正常调用; 如果形参未赋值,就使用默认值 undefined 2.4 正则对象 2.4.1 RegExp 对象的创建方式
一个变量被声明,但是没有被赋值,则值为undefined。...需要说明的是undefined的变量,与未定义的变量是有区别的。未定义的变量不能直接使用,会产生异常。...,未定义的变量的值和已经定义(未初始化)变量的值都为“undefined”。...如0xaf=10*Math.pow(16,1)+15*Math.pow(16,0)=175; JavaScript能表示的最小值保存在Number.MIN_VALUE中,值为5e-324,最大值保存在...字符串的初始化后,值是不可变的,除非给改字符串重新赋值。 要将一个值转换为字符串,可以调用toString()方法。默认是转换为十进制的,也可以转换为2进制、8进制、16进制。
要做到这一点,该变量必须用预定的键来命名。 请看下面一个对象属性赋值简写语法的例子。...通过可选链,我们可以更进一步,在不确定键或值是否存在或被设置的情况下,也可以读取它们。当键不存在时,来自可选链的值是未定义的。...[2]); // undefined 简写法 解构赋值 除了传统的点符号,另一种读取对象值的方法是将对象的值重构为它们自己的变量。...下面的例子演示了如何使用传统的点符号和使用解构赋值的实用代码技巧来读取一个对象的值。...你可以用展开操作符来代替数组函数,如concat,和对象函数,如object.assign。
本文来源于多年的 JavaScript 编码技术经验,适合所有正在使用 JavaScript 编程的开发人员阅读。 本文的目的在于帮助大家更加熟练的运用 JavaScript 语言来进行开发工作。...'greater than 10' : 'less than 10'; 2、循环语句 当使用纯 JavaScript(不依赖外部库,如 jQuery 或 lodash)时,下面的简写会非常有用。...null、未定义的或空值。...ES6 提供了一个很简单的办法,来分配属性的对象。...解构赋值是一种表达式,用于从数组或对象中快速提取属性值,并赋给定义的变量。
一、何为迷途指针。 迷途指针,顾名思义就是迷路的指针,当然开个玩笑,其实也就是如果内存已经释放(如用free函数),但是指针却在继续引用原始内存,像这样的指针,我们就称为迷途指针。...有这样一小段代码,如: int *p=(int *)malloc(sizeof(int)); free(p); 这一段代码,程序会在堆中分配一个整形长度的内存,比如这段内存的首地址是1000,那么指针变量...p的值为1000,当调用函数free释放这段内存时,指针变量p的值任然是1000,虽然这段内存已被释放,但这段内存中任然可能包含原值,但此生指针p已指向的不是一个有效的对象,因为这段内存可能会被重新利用...,里面的数据也是不确定的,由于大部分运行时系统不会阻止对后续的访问与修改,所以如果我们试图解引一个已释放的指针,其行为是未定义的,那么将可能引起很多问题,如:如果再次访问这段内存,其行为是不可预期的、潜在的安全隐患...注意赋值只会影响被赋值的指针。多指针的话还会有问题。 2、用第三方工具检查迷途指针。 3、自己写一个函数代替free函数。 好了今天暂时只介绍到这里,每天介绍一个小知识,有助于提高编程水平哦。
前言 JavaScript 是 Web 的编程语言。所有现代的 HTML 页面都使用 JavaScript。...JavaScript 简介 JavaScript 的学习分三个部分: 1、核心(ECMAScript):JavaScript的核心,描述了语言的基本语法和数据类型。...变量必须以字母开头 变量也能以 $ 和 _ 符号开头(不过我们不推荐这么做) 变量名称对大小写敏感(y 和 Y 是不同的变量) var 先声明后赋值 当我们使用var 声明变量,没有赋值的时候,那么它是未定义...如果未使用var 直接定义的变量,它实际上是定义了全局对象 window 的一个属性,前面说了JavaScript 的学习分三个部分:核心(ECMAScript)、文档对象模型DOM、浏览器对象模型BOM...其中浏览器( Browser)对象模型 BOM 包含了以下对象 Window 对象 Navigator 对象 Screen 对象 History 对象 Location 对象 未使用 var 直接定义的变量
-- JavaScript堆内存与栈内存 1、堆内存:基本数据类型,如整型,字符串 2、栈内存:引用数据类型,如对象 --> <!...-- JavaScript的基本数据类型 1、数字类型:Number,包括整型int和浮点型float和NaN, NaN是number类型,但是NaN不等于,不大于,也不小于任何数字,包括NaN...2、字符串:string,字符,符号,数字组成的序列 3、布尔值:Boolean,false或true,用于调节判断 4、空:Null 声明一个空对象,只能是对象(引用数据类型) 5、未定义:Undefined...,内部只有一个值undefined,如果声明了某个变量但是没有赋值,那么变量的类型就是undefined --> <!...-- JavaScript引用数据类型 1、对象:Object --> //数字类型 var s1=123; alert(s1); //NaN
领取专属 10元无门槛券
手把手带您无忧上云