javascript有类的概念。
js里面类通过function进行定义,有些类似c++的struct定义。
代码示例:
function MyClass(){this.a = '2'
this.show=function(){
alert('1')
}
}
var myClass = new MyClass()
alert(myClass.a)//获取属性
myClass.show()//调用类方法
原因比较多,我个人分析认为主要有以下两大方面的原因
历史遗留原因
javascript在当时设计之初,是带着商业竞争目的的,js前身为livescript,主要是使得浏览器初步具备客户端能力,因此并不是特别完善。
网页端js开发在相当一段时间内,由于浏览器的js解释引擎性能并不高,而且网络带宽也比较小,因此绝大多数站点的代码规模并不大,主要针对页面内容一些简单交互逻辑,在此前提下,浏览器厂商以及工业界都没有强大的动力去实现面向对象版本的js。
技术实现原因
考虑到到网页环境的特殊性,使用原型继承而不是类继承的方式,更节约内存空间,而且解释器的实现更为简单。
js开源界在不断的技术积累中,开发者已经逐渐适应了没有类的js开发模式,在js中实现真正的类反而显得有些鸡肋。
最后:虽然现在ES6标准中已经有class关键字了,但是归根到底类还是一个语法糖,其底层还是基于原型继承的。
弱类型语言也是有类型的。或者说,任何计算机语言都是要有类型的。
基本数据类型有:number、string、boolean、undefined、null
引用类型有:object、function
var num = 123console.log(typeof num)//number
var str = 'string'
console.log(typeof str)//string
var bool = true
console.log(typeof bool)//boolean
var undef = undefined
console.log(typeof undef)//undefined
var nul = null
console.log(typeof nul)//object。因为null代表对象是空的情况。
自动类型转换
"10.0"%"5"//结果是0,string类型自动类型转换为number类型!0//结果是true,number类型自动转换为boolean类型
"10.0" + 5//结果是"10.05",number类型自动转换为string类型
1 + true//结果是2,boolean类型自动转换为number类型。