博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Javascript 学习记录
阅读量:6937 次
发布时间:2019-06-27

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

不要使用传统语言(C#,JAVA)的面向对象理念去理解JS, 在ES5中没有类这个概念,虽然也有new操作符, 但完全可以不去用, function在js中是一等公民, 可以用function去做任何事情, 当然也包括创建对象,js中的编程风格是函数式编程, 在js中不需要通过new去创建对象, 这样看上去也比较奇怪,也不利于理解JS.当创建一个新对象时, 只需要说让这个新对象看上去像某个对象就OK了, 这个就是原型, 新对象是以某个对象为原型创建的, 所以新对象拥有原型对象(看上去像的对象)特征.

那应该怎么去创建对象呢.有一种最简单的方式,对象字面量, var o = {};没错就这么简单. 刚才说一个对象要像另外一个对象那这个对象像谁呢? 没错当创建一个对象的时候这对象一定会有一个参考对象(或者叫蓝本), 这个对象(o)就是参考Object创建的, Object是js中所有对象的始祖
JS中的对象按创建方式分为两种 : 一种是 函数对象, 一种是 通过函数对象创建的对象

"use strict"  开启ES5的严格模式

javascript是unicode字符集编写的, 所以天生支持unicoude, unicode转意符以\u开头,后面接4个16进制数(\u00e9)

javascript区分大小写

javascript中空格是被忽略的,可以在程序的标识之间使用任意数量的空格.  换行, 分号在不引起歧义的情况下也会被忽略掉

数据类型

javascript不是强类型语言,所以在给变量赋值的时候不需要指明变量的具体类型,根据其上下文的环境自动判断数据类型
数字(number), 字符串(string), 布尔(boolean),对象(object). 前面三个是原始类型, 最后一个是对象类型, null, defined, NaN, Infinity这些是js中的特殊值
js中的浮点数使用的是二进制表示法(IEEE-754), 该表示法, 可以精确的表示二进制分数1/2, 1/8, 1/1024,但对于我们日常使用的十进制分数无法准确的表示

0.2-0.1=0.10.3-0.2=0.099999999999999980.4-0.3=0.100000000000000030.5-0.4=0.09999999999999998

对于这样的问题我们可以通过.toFixed(n)四舍五入来解决, n=0-20包括0,20 

3种原始类型也可以属性,原因是javascript也有"装箱"和"拆箱"的过程,所以这3种类型虽然可以使用对应对象的相关属性,但类型却不是对象

数字类型

javascript中不分整型和浮点,一律使用浮点类型, 范围是253~2-53,但数组索引和位运算则是基于32位整数.一些复杂的算数运算我们可以通过Math来完成.

布尔类型

布尔值主要用于关系判断,js中的所有类型在进行关系判断的时候都会进行类型转换
undefine, null, NaN, 0, -0, ""(空字符串) 这些类型会被转换为false, 除此以外其他的值都会被转换成true.
用于关系判断的运算符有: ==(等于), ===(严格相等), !=(不等于), !==(不严格相等), >(大于), <(小于), >=(大于等于), <=(小于等于), in运算符, instanceof运算符

Date是javascript的内置对象,我们通过new Date来创建日期对象

var d = new Date(); //用当前的时间创建一个日期对象var d = new Date(2015,0,1);//表示2015-01-01, javascript是从0开始计算月份的var s = new Date(2015,0,1,0,0,0);//开始时间var d = new Date(2015,0,1,0,0,1);//开始时间d-s=1000;//时间间隔用毫秒表示d.getYear(); //当前年份-1900的值d.getFullYear();//获取年份d.getMonth();//获取月份, 从0开始计算, 12月得到的是11d.getDate();//获取天数, 从1开始计算d.getDay();//获取星期数,从0开始计算,星期天用0表示,国外的习惯是星期天是一个星期的开始d.getHours();//获取小时数(0-23), 如果写24会自动转换成第二天的0时(webkite下面测试)d.getMinutes();//获取分钟数(0-59)d.getSeconds();//获取当前秒数(0-59)

 数据类型的转换

javascript的原始类型就3种,数字,字符,布尔类型. 这三种类型之间的转换比较简单,
(数字, 布尔)-->(字符串):数字转换成字符串是把数字表示的值直接转换成字符串形式, 布尔转换成字符串是 "false" 和 "true",
(数字, 字符串)-->(布尔):空字符串("",引号之间没有空格), 0 和 -0 转换成布尔为假值(false), 其他的数字和字符串都转换成真值(true), 
(字符串, 布尔)-->(数字):所有以数字表示的字符串("12", "22")可以直接转换成对应的数字, 字符串中的开始和结束的空格会被忽略调, 对于非空,非数字开头的字符串会被转换成NaN

强制类型转换

parseInt, parseFloat, Boolean, Number, String后3个是内置对象的构造函数

根据上下文环境发生的类型转换

23+"string" ==> 转换成字符串
"4"*"3"  ==> 转换成数字

全局对象

当javascript解释器启动的时候会创建一个全局对象, 并给全局对象初始化一些特定的属性

Object.prototype.hasOwnProperty

该API用于判断当前对象是否包含某个自身属性, 所谓自身属性是指非继承的属性, 该API可以区分那些属性是继承的属性那些是自身的属性, 自身的属性会返回true, 继承的属性返回false

Object.prototype.isPrototypeOf

该API用于判断一个对象是否在另一个对象的原型链上

function Fee() {  // . . .}function Fi() {  // . . .}Fi.prototype = new Fee();function Fo() {  // . . .}Fo.prototype = new Fi();function Fum() {  // . . .}Fum.prototype = new Fo();var fum = new Fum();. . .if (Fi.prototype.isPrototypeOf(fum)) {  // ...}

面向对象的特性

JS中也实现了一些面向对象的特性, 比如说对象, 继承, 多态, 因为面向对象的概念只是一个规范, 每种语言对规范的实现是不一样的. 在JS中就没有类的概念(至少在ES5之前是这样的). 如果没有类的概念, 那对象是按什么样的标准创建的呢? 在C#, C++这样的语言中
所有的对象都能追根溯源, 最后能找到Object 这个类. 在JS中所有对象的根是NULL, 在JS中对象是通过原型链进行溯源的, 出了NULL 所有的对象都一个__proto__属性, 这个是一个未公开的属性, 这个属性告诉了我们该对象是根据那个原型创建出来的

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

你可能感兴趣的文章
[DEV] 在linux 64 系统下面进行32位程序开发
查看>>
BeautifulSoup安装与引用
查看>>
java绝对路径和相对路径的理解
查看>>
C#调用C++ DLL问题
查看>>
SSE图像算法优化系列二十:一种快速简单而又有效的低照度图像恢复算法。
查看>>
binary serialization
查看>>
Android课程---添加黑名单的练习(课堂讲解)
查看>>
一个机器学习博客 ,包括 Standford公开课machine learning
查看>>
robotframework导入测试库使用方法
查看>>
jQuery-DOM操作之html()、text()、val()
查看>>
阅读《Effective C++》系列
查看>>
(转)Android技术积累:图片缓存管理
查看>>
MyEclipse6.5安装SVN插件的三种方法
查看>>
Oracle游标声明
查看>>
Mysql相关技术细节整理
查看>>
20160427Struts2--入门1
查看>>
如何搭建javaweb 开发环境
查看>>
输入年月日,看看格式是否正确。
查看>>
hotplug/mdev机制
查看>>
Deepin深度Linux系统安装记录
查看>>