数据类型的不同
js常见的数据类型有 ,Number ,bool,null,undefine,string 对象有 object function 数组 (函数和数组都是特殊的对象)
js中的对象是用于存储数据的 函数是特殊的对象有对象的特性但是可以执行 数组也是特殊的对象里面的数据有序
js中对象的写法
var obj ={
name:"wanwan";
age:18
}
数组的写法:
var a=[
]
变量的赋值方式不同
Js中声明变量的时候不用提前声明是什么类型的变量
var a a被赋予什么值就是什么类型的变量 如果没有赋予就是undefine
Java中需要需要先声明什么类型的变量 什么类型的变量赋什么类型的值
Java中明确规定:
1、如果是引用型的,比如:String,还有类对象,他们的默认值都是:null;
2、而如果是值类型:double,int,long,float,char等等,他们都是:0;
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
类型判断方式不同
typeof 返回基本类型的字符串表达式 不能判断 null 数组 (会被判断成object)
instanceof 对象 只能判断对象的类型(和java一样)
===也可以判断数据的类型 ===判断null 和undefine (看举例)
Java中也有
instanceof
用它来判断某个对象是否是某个
Class
类的实例。
// Numbers
typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
typeof NaN === 'number'; // 尽管NaN是"Not-A-Number"的缩写
typeof Number(1) === 'number'; // 但不要使用这种形式!
// Strings
typeof "" === 'string';
typeof "bla" === 'string';
typeof (typeof 1) === 'string'; // typeof总是返回一个字符串
typeof String("abc") === 'string'; // 但不要使用这种形式!
// Booleans
typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean'; // 但不要使用这种形式!
// Symbols
typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';
// Undefined
typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined';
// Objects
typeof {a:1} === 'object';
// 使用Array.isArray 或者 Object.prototype.toString.call
// 区分数组,普通对象
typeof [1, 2, 4] === 'object';
typeof new Date() === 'object';
// 下面的容易令人迷惑,不要使用!
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String("abc") === 'object';
// 函数
typeof function(){} === 'function';
typeof class C{} === 'function'
typeof Math.sin === 'function';
typeof new Function() === 'function';
===
与
==
的区别
==== 可以不会转换类型(类型不同直接为false) == 会自动转换类型(类型不同,先转类型再比较)
操作数
1 ==
操作数
2
,
操作数
1 ===
操作数
2
比较过程:
双等号
==
:
(
1
)如果两个值类型相同,再进行三个等号
(===)
的比较
(
2
)如果两个值类型不同,也有可能相等,需根据以下规则进行类型转换在比较:
1
)如果一个是
null
,一个是
undefined
,那么相等
2
)如果一个是字符串,一个是数值,把字符串转换成数值之后再进行比较
三等号
===:
(
1
)如果类型不同,就一定不相等
(
2
)如果两个都是数值,并且是同一个值,那么相等;如果其中至少一个是
NaN
,那么不相等。(判断一个值是否是
NaN
,只能使用
isNaN( )
来判断)
(
3
)如果两个都是字符串,每个位置的字符都一样,那么相等,否则不相等。
(
4
)如果两个值都是
true
,或是
false
,那么相等
(
5
)如果两个值都引用同一个对象或是函数,那么相等,否则不相等
(
6
)如果两个值都是
null
,或是
undefined
,那么相等
数据类型与变量类型
数据类型和变量类型的区分:(角度不同)
数据类型:(存储是数据还是数值)
基本类型
对象类型
注意:
其实基本类型可以简单的理解为存数值的 对象是存数据的
变量类型 (存储的实实在在的数值还是地址)
值类型
引用类型
注意:
把数据和变量区分开来 变量是没有类型的 变量类型是指变量所指的数据(变量值)的类型
null
和
undefined
的区别:
null定义并且赋值了:1,用于表面某个变量将会赋值为对象 2. 把对象清空方便回收
undefined定义了没有赋值:1.没有赋值的变量
Java中明确规定:
1、如果是引用型的,比如:String,还有类对象,他们的默认值都是:null;
2、而如果是值类型:double,int,long,float,char等等,他们都是:0;
一个变量作为类成员使用的时候,如果没有被初始化,
java会为其分配默认值:
Boolean false
Char '\u0000'(null)
byte (byte)0
short (short)0
int 0
long 0L
float 0.0f
double 0.0d
如果在一个方法中定义一个变量,
java不会给其分配默认值,就必须我们来给他初始化,否则将得到编译错误的提示;
函数的区别:
js中函数调用的方式:
1.直接调用
2.函数在对象中通过对象.函数来调用
3.如果函数没有在对象中也可以使用某个对象临时调用
写法 :
-
new 的方式 构造函数 test.apply/call(obj)
函数一般都要通过对象来执行 默认是window
每个函数都有一个this变量: 表示的是调用函数的对象
如何确定this值:
test() window
new test() 新创建的对象
p.text() p对象
p.call(obj) obj对象
回调函数:
什么是回调函数:
我声明了没有调但是执行了
常用的回调函数:
1.dom事件回调函数 点击 失去焦点
2.定时器:延时,循环
3.ajax请求回调函数
4.生命周期回调函数
其他;
1.java指定什么类型的变量只对什么类型的数据
但是js中没有对变量进行分类都是var 这变量可以只对任何内容
2.java中的null表的范围是js中null加undefined
3.number表示虽有数字 (整型·浮点型) string在java中是对象 而js中是基本类型
4.java中的对象与js中的对象可以类比 不过js中函数也是对象 数组也是特殊的对象
5.
js
代码可以不用写分号(也可以写
)
6.
js
和
java
不同的一定在于
js
即使对象中没有的属性 也可以后期同时添加属性和属性值
var p={}
p.name=‘高旦朋’ 这样是可以的
java与js类比:
之前我们学习的js和javaSe有点像:语法类似 ,功能上也就是操作界面
有了nodejs以后和javaEE有点像 nodejs有点类似jre
Js
中的对象可以类比
java
中类, 函数可以类比
java
中的方法, 变量可以类比类中的属性
7.
每个函数都有自己的原型对象,函数有原型对象的属性和方法 有点像java中的接口
函数对象通过某个属性来指向原型对象(prototype) 原型对象也有某个属性来指向函数?????construct?? ?
函数中有个属性是prototype 指向原型对象
js域java语法的区别对比