diff --git a/src/eval.c b/src/eval.c
index 21ba1bc..a91ca2d 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -6403,9 +6403,9 @@
 	    {
 		class_T *cl = tv->vval.v_class;
 		char *s = "class";
-		if (cl && IS_INTERFACE(cl))
+		if (cl != NULL && IS_INTERFACE(cl))
 		    s = "interface";
-		else if (cl && IS_ENUM(cl))
+		else if (cl != NULL && IS_ENUM(cl))
 		    s = "enum";
 		size_t len = STRLEN(s) + 1 +
 		    (cl == NULL ? 9 : STRLEN(cl->class_name)) + 1;
diff --git a/src/evalfunc.c b/src/evalfunc.c
index 742c5f8..8ee5cbd 100644
--- a/src/evalfunc.c
+++ b/src/evalfunc.c
@@ -3958,7 +3958,7 @@
 					  || *argvars[0].vval.v_string == NUL;
 	    break;
 	case VAR_PARTIAL:
-	    n = FALSE;
+	    n = argvars[0].vval.v_partial == NULL;
 	    break;
 	case VAR_NUMBER:
 	    n = argvars[0].vval.v_number == 0;
@@ -11497,7 +11497,7 @@
 	case VAR_CLASS:
 	    {
 		class_T *cl = argvars[0].vval.v_class;
-		if (cl && IS_ENUM(cl))
+		if (cl != NULL && IS_ENUM(cl))
 		    n = VAR_TYPE_ENUM;
 		else
 		    n = VAR_TYPE_CLASS;
diff --git a/src/testdir/test_vim9_builtin.vim b/src/testdir/test_vim9_builtin.vim
index 42d09fe..83153ad 100644
--- a/src/testdir/test_vim9_builtin.vim
+++ b/src/testdir/test_vim9_builtin.vim
@@ -4783,8 +4783,6 @@
   if has('channel')
     assert_equal('channel', test_null_channel()->typename())
   endif
-  assert_equal('class<Unknown>', typename(null_class))
-  assert_equal('object<Unknown>', typename(null_object))
   var l: list<func(list<number>): number> = [function('min')]
   assert_equal('list<func(list<number>): number>', typename(l))
 enddef
diff --git a/src/testdir/test_vim9_class.vim b/src/testdir/test_vim9_class.vim
index 0a48b82..0754af7 100644
--- a/src/testdir/test_vim9_class.vim
+++ b/src/testdir/test_vim9_class.vim
@@ -560,7 +560,7 @@
   END
   v9.CheckSourceSuccess(lines)
 
-  # Test for using a null class with string()
+  # Test for using a null class with type() and typename()
   lines =<< trim END
     vim9script
     assert_equal(12, type(null_class))
@@ -569,30 +569,6 @@
   v9.CheckSourceSuccess(lines)
 enddef
 
-def Test_using_null_object()
-  # Test for using a null object as a value
-  var lines =<< trim END
-    vim9script
-    assert_equal(1, empty(null_object))
-  END
-  v9.CheckSourceSuccess(lines)
-
-  # Test for using a null object with string()
-  lines =<< trim END
-    vim9script
-    assert_equal('object of [unknown]', string(null_object))
-  END
-  v9.CheckSourceSuccess(lines)
-
-  # Test for using a null object with string()
-  lines =<< trim END
-    vim9script
-    assert_equal(13, type(null_object))
-    assert_equal('object<Unknown>', typename(null_object))
-  END
-  v9.CheckSourceSuccess(lines)
-enddef
-
 def Test_class_interface_wrong_end()
   var lines =<< trim END
     vim9script
diff --git a/src/testdir/test_vim9_script.vim b/src/testdir/test_vim9_script.vim
index a3f21be..9ec92b3 100644
--- a/src/testdir/test_vim9_script.vim
+++ b/src/testdir/test_vim9_script.vim
@@ -5055,6 +5055,34 @@
   v9.CheckSourceSuccess(lines)
 enddef
 
+" Test for using various null values
+def Test_null_values()
+  var lines =<< trim END
+    var nullValues = [
+      [null, 1, 'null', 7, 'special'],
+      [null_blob, 1, '0z', 10, 'blob'],
+      [null_channel, 1, 'channel fail', 9, 'channel'],
+      [null_dict, 1, '{}', 4, 'dict<any>'],
+      [null_function, 1, "function('')", 2, 'func(...): unknown'],
+      [null_job, 1, 'no process', 8, 'job'],
+      [null_list, 1, '[]', 3, 'list<any>'],
+      [null_object, 1, 'object of [unknown]', 13, 'object<Unknown>'],
+      [null_partial, 1, "function('')", 2, 'func(...): unknown'],
+      [null_string, 1, "''", 1, 'string']
+    ]
+
+    for [Val, emptyExp, stringExp, typeExp, typenameExp] in nullValues
+      assert_equal(emptyExp, empty(Val))
+      assert_equal(stringExp, string(Val))
+      assert_equal(typeExp, type(Val))
+      assert_equal(typenameExp, typename(Val))
+      assert_equal(Val, copy(Val))
+      assert_equal(-1, test_refcount(Val))
+    endfor
+  END
+  v9.CheckSourceDefAndScriptSuccess(lines)
+enddef
+
 " Keep this last, it messes up highlighting.
 def Test_substitute_cmd()
   new
diff --git a/src/version.c b/src/version.c
index ee336f8..6dbd93a 100644
--- a/src/version.c
+++ b/src/version.c
@@ -705,6 +705,8 @@
 static int included_patches[] =
 {   /* Add new patch number below this line */
 /**/
+    387,
+/**/
     386,
 /**/
     385,
diff --git a/src/vim9type.c b/src/vim9type.c
index ab7efce..517dee2 100644
--- a/src/vim9type.c
+++ b/src/vim9type.c
@@ -2093,7 +2093,7 @@
 		class_T *cl = tv->vval.v_class;
 		char_u *class_name = (cl == NULL) ? (char_u *)""
 							: cl->class_name;
-		if (cl && IS_ENUM(cl))
+		if (cl != NULL && IS_ENUM(cl))
 		    semsg(_(e_using_enum_as_value_str), class_name);
 		else
 		    semsg(_(e_using_class_as_value_str), class_name);
